(n!/(n1! *n2! *n3!..nr!) )   * r!/( 同数量组A的数量! 同数量组B的数量!....) 比方20个东西分成2,2,,2,2   3,3,3,3 8组分给8个人有多少种分法 [20!/(2!^4  3!^4)] *  8! /(4!*4!) 说明8!表示有8组,那么意味着有8!种排列,由于2,2,2,2有4组,其中4!种排列是重复的同理3,3,3,3也一样 考虑特色情况8个人分8个不同的东西,每人一个 那么分组是1,1,1,1,1,1,1,1          …
每次分配一个苹果出去,然后再分配N-1个苹果.这里有个注意的地方就是,分那1个苹果的时候,假设还有N个苹果,不是从第一个人开始分,而是从N+1个苹果分配的位置开始,不然的话会产生重复的解.所以i=p不是i=0. List<Integer> result = Lists.newArrayList(0, 0, 0); @Test /** * N个苹果 M个人分 */ public void testMN() { foo(3, 3, 0); } private void foo(int n, int…
// n级台阶,求多少种跳法.cpp : Defines the entry point for the console application. // /* 思路: 如果只有一级台阶,n=1,很明显只有一种跳法 如果有两级台阶,n=2,则有两种跳法,一种是跳两下1级,一种是直接跳两级 那么我们来看看如果有n层台阶,可以怎么跳: n层台阶可以是这么够成的 1.第n层台阶是从第n-1层跳1级上来的 2.第n层台阶是从第n-2层直接跳2级上来的 所以可以得到n层的跳法总数是F(n)=F(n-1)+F…
时间限制:1秒     空间限制:32768k 斐波那契数列指的是这样一个数列: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368. 可以观察到,从第3个数开始,每个数的值都等于前连个数之和. 同时,定义f(0)=0, f(1)=1. 则 f(2)=f(1)+f(0)=1; f(3)=f(2)+f(1)=2; ... 依次类推,  f(…
// test14.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include<string> #include<cctype> #include <vector> #include<exception> #include <initializer_list> using namespace std; class Solution…
class Solution { public: int jumpFloor(int number) { ) ; ) ; )+jumpFloor(number-); } }; 如果先建立数组,然后利用数组累加,会超出存储限制.…
把8个同样的球放在同样的5个袋子里,允许有的袋子空着不放,问共有多少种不同的分法? 提示:如果8个球都放在一个袋子里,无论是放哪个袋子,都只算同一种分法. 解析: 把问题合成,先思索5个袋子都不空的状况,再思索4个袋子不空的状况,以此类推,最后思索只运用一个袋子的状况(这种分法只要1种),把一切子状况的分法数相加求出总分法. 进一步剖析,运用k个袋子装n个球(袋子不空),一共有几种分法的问题能够转化为k个数相加等于n的种数问题. 运用5个袋子装8个球则有3种: 1+1+1+1+4 = 8 1+1…
问题:w1.w2.w3.w4.w5,5个元素将会按顺序入栈,求出栈顺序有多少种情况. 先写一下结论方便记忆: 1个元素:1种 2个元素:2种 3个元素:5种 4个元素:14种 5个元素:42种 简单的分析过程如下: n个数据依次入栈,出栈顺序种数的递推公式如下:F(n)=∑(F(n-1-k)*Fk);其中k从0到n-1 已知F0=1,F1=F0*F0=1F2=F1*F0+F0*F1=2F3=F2*F0+F1*F1+F0*F2=5F4=F3*F0+F2*F1+F1*F2+F0*F3=14F5=F4…
题目:N个数依次入栈,出栈顺序有多少种? 首先介绍一下卡特兰数:卡特兰数前几项为 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 486194…
首先说明这是一个数学的排列组合问题C(m,n) = m!/(n!*(m-n)!) 比如:有集合('粉色','红色','蓝色','黑色'),('38码','39码','40码'),('大号','中号') 分别从每一个集合中取出一个元素进行组合,问有多少种组合?解:C(4,1) * C(3,1) * C(2,1) = (4!/(1!*(4-1)!)) * (3!/(1!*(3-1)!)) * (2!/(1!*(2-1)!)) = 24/6 * 6/2 * 2 = 4 * 3 * 2 = 24(种)…
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;} th{border: 1px solid gray; padding: 4px; background-color: #DDD;} td{border: 1px solid gray; padding: 4px;} tr:nth-child(…
卡特兰数 大神解释:https://blog.csdn.net/akenseren/article/details/82149145      权侵删 原题 有一个容量足够大的栈,n个元素以一定的顺序入栈,出栈顺序有多少种? 比如,AB两个元素,入栈顺序为AB,出栈情况有两种: (1)入A,出A,入B,出B,出栈顺序为AB: (2)入A,入B,出B,出A,出栈顺序为BA. 因此,2个元素时,结果为2. 分析:设f(n)为“n个元素以一定的顺序入栈,出栈顺序的种类数”.显然f(1)=1,f(2)=…
假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶. 1. 1 阶 + 1 阶 2. 2 阶 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶. 1. 1 阶 + 1 阶 + 1 阶 2. 1 阶 + 2 阶 3. 2 阶 + 1 阶 这个题本质就是解裴波拉切数 定义F(n)表示到达第n个台阶的方法,则F(n)…
问题描述: 给定m个A,n个B,一共有多少种排列 解题源代码: /** * 给定m个A,n个B,问一共有多少种排列 * @author Administrator * */ public class Demo06 { public static int f(int m,int n) { if(m==0||n==0)return 1; return f(m-1,n)+f(m,n-1); } public static void main(String[] args) { System.out.pr…
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形. 请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 是不是发现看不懂,哈哈:编程题就是这样,一定要归纳,手写过程: n = 1,则 1; n = 2.则1,1横1,1竖:是不是有点眼熟: n= 3,则1,1,1横,1,1横1竖,1竖1,1,横:...还要再说么? 注意不能省2,因为0为0: public class Solution { public int RectCover(int target) { if(ta…
/** 题目:Confusing Date Format UVALive 7711 链接:https://vjudge.net/contest/174844#problem/A 题意:给定mm-mm-mm格式的时间.年份(1900-1999)只给了后两位数,问有多少种合法的排列使时间正确. 思路: 第一次:快速读题,题意不清,没注意到这句话, To punish teams who did not read this problem statement carefully, we’ll add…
N个节点的二叉树有多少种形态   这是一道阿里的面试题.其实算不上新鲜,但是我之前没关注过,如今碰到了,就顺便探讨下这个问题吧:) 拿到这个题,首先想到的是直接写出表达式肯定不行,所以有必要从递推入手.由特殊到一般,归纳法么~而且二叉树离不开递推这个尿性... 先考虑只有一个节点的情形,设此时的形态有f(1)种,那么很明显f(1)=1 如果有两个节点呢?我们很自然想到,应该在f(1)的基础上考虑递推关系.那么,如果固定一个节点后,有两种情况,一是左子树还剩一个节点,此刻类型数量为f(1),第二种…
迭代器 我们已经知道,可以直接作用于for循环的数据烈性有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str,bytes等: 一类是generator,数据结构,包括生成器和带yield的generator function. 这些可以直接作用于for循环的对象统称为可迭代对象:Iterable 可以使用isinstance()判断一个对象是否是Iterable对象. 而生成器不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值, 直到最后抛出S…
不容易系列之(4)——考新郎 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 37629    Accepted Submission(s): 13786 Problem Description 国庆期间,省城HZ刚刚举行了一场盛大的集体婚礼,为了使婚礼进行的丰富一些,司仪临时想出了有一个有意思的节目,叫做"考新郎",具体的操作…
/** 题目:F - Goldbach`s Conjecture 链接:https://vjudge.net/contest/154246#problem/F 题意:对一个大于2的偶数n,找有多少种方法使两个素数的和为n:保证素数a<=b; a+b==n; a,b都为素数. 思路:直接暴力,为了避免内存超限,用bool类型判断素数. */ #include<bits/stdc++.h> using namespace std; typedef long long ll; ; bool f…
/** 题目:C - Aladdin and the Flying Carpet 链接:https://vjudge.net/contest/154246#problem/C 题意:有多少种长方形满足面积为a,且最短边>=b:长方形边长为整数,且一定不可以是正方形. 思路:求出a的素因子以及每个素因子的个数,然后搜索所有满足条件的方法数. 其实可以求出所有<b的方法数,用总的减去它,可以更快,不过更麻烦. */ #include<bits/stdc++.h> using names…
有个人想上一个n级的台阶,每次只能迈1级或者迈2级台阶,问:这个人有多少种方法可以把台阶走完? 相关问题: (1)有个人想上一个n级的台阶,每次只能迈1级或者迈2级台阶,问:这个人有多少种方法可以把台阶走完?例如:总共3级台阶,可以先迈1级再迈2级,或者先迈2级再迈1级,或者迈3次1级总共3中方式. (2)有一段楼梯有10级台阶,规定每一步只能跨一级或两级,要登上第10级台阶有几种不同的走法? (3)一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来.如果所有兔子都不死…
Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For example,Given n = 3, there are a total of 5 unique BST's. 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3 注意:二分查找树的定义是,左子树节点均小于root,右子树节点均大于root!不要想当然地将某…
https://blog.csdn.net/tcpipstack/article/details/45173685 一个人爬楼梯,一步可以迈一级,二级,三级台阶,如果楼梯有N级,要求编写程序,求总共有多少种走法. N级楼梯问题可以划分为:N-1级楼梯,N-2级楼梯,N-3级楼梯的走法之和. 先计算下0,1,2,3及楼梯有多少种走法: 1 --> 1 2 --> 11 2 3 --> 111 12 21 3…
最近Qt的blog总结了到底有多少种smart pointer, 下面是一个简要的介绍: 1.   QPointer :提供对指针的保护,当一个指针被删除以后,再使用不会造成野指针或者指针溢出.比如 QPointer<MyObj> obj …;if(!obj.isNull()) obj->foo;// 成功… //对象被另外一个线程删除了if(!obj.isNull()) obj->foo;// 不会造成内存错误,该函数不会被调用 (2009/10/27更正:需要加入if(!obj…
1 题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22.现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 输出描述: 输出所有和为S的连续正数序列.序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序 2 思路和方法  类似于滑动窗口,初始…
1. 题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 2.思路和方法 思路:(下面说到的x*y的矩形,x是宽,y是长,固定一下方便理解)假设一个2×n的矩形,那么放第一个小矩形有两种放法:放2×1的或者放1×2的,如果是放1×2的意味着在它的下面也只能放一个1×2的,组成一个2×2正方形.那么我们就可以分为两种结构,第一种是2×1的矩形,第二种是2×2的正方形.宽都是2不用考虑,长有1和2两种选择,那么可…
前两天面试遇到的一个题,当时没有想清楚,今天想了一下,po出来: # -*-encoding:utf-8-*- import sys end = 0 # 终点 cnt = 0 # 统计组合方式 def jump(start): global cnt for i in [1,2]: cur = str(start)+"+"+str(i) if eval(cur) >= end: print cur cnt += 1 continue jump(cur) def main(n): &…
/* 问题描述: 小明有5本新书,要借给A.B.C三位小朋友, 若每人每次只能借一本,则可以有多少种不同的借法? 问题分析: 本题属于数学当中最常见的排列组合问题, 即求从5个数当中取3个不同数的排列组合的总数. 算法设计: 穷举法(枚举法).三重循环 循环三要素: 1)循环变量的初始化 2)循环的条件(以循环变量为基础) 3)循环变量的改变(向着循环的结束变) */ #include "stdio.h" int main() { ;//计算个数 printf("A,B,C…