题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
解法:
设青蛙跳上n级台阶有f(n)中方式,则
f(n) =f(n-1)+ f(n-2)+...+f(2)+f(1)+f(0):(f(n-1)为第一次跳了1个台阶,剩下n-1个台阶有f(n-1)中跳法,以此类推。)
f(n-1) = f(n-2)+...+f(2)+f(1)+f(0)
那么f(n)=f(n-1)+f(n-1)=2*f(n-1):因此得到递归公式:
1 n = 1
f(n)= 2*f(n-1) n>1
class Solution { public: int jumpFloorII(int number) { if(number == 1) return 1; else return 2*jumpFloorII(number-1); } };
排列组合解法:
第n个台阶一定要跳,其余n-1个台阶可以选择跳或者不跳,两种可能,那就一共是2^(n-1)中可能性
class Solution { public: int jumpFloorII(int number) { return 1<<--number; } };
最开始的解法:直接使用了这个公式f(n) =f(n-1)+ f(n-2)+...+f(2)+f(1)+f(0)
class Solution { public: int jumpFloorII(int number) { int * f = new int[number+1]; memset(f, 0, sizeof(f)); f[0] = 1; for(int i=1;i<=number;i++){ for(int j=0;j<i;j++){ f[i] += f[j]; } } return f[number]; } };
对于这种题目也可以写出数列找规律。