题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
解法1:
根据题目的意思f(n)=f(n-1)+…+f(2)+f(1)+f(0),直接写出代码可以过,
但是时间复制度为O(N^2),空间开销也大。
class Solution {
public:
int jumpFloorII(int number) {
int *f = new int[number+1];
f[0]=1;
f[1]=1;
for(int i=2;i<=number;i++){
for(int j=0;j<i;j++)
f[i]=f[j]+f[i];
}
return f[number];
delete[] f;
}
};
解法2:
f(n) = f(n-1)+f(n-2)…+f(2)+f(1)+f(0)
f(n-1) = f(n-2) + f(n-3)…+f(2)+f(1)+f(0)
两个式子相减得到 f(n)=2*f(n-1)
其实就相当于一个等比数列,一行代码可以搞定。
class Solution {
public:
int jumpFloorII(int number) {
return 1<<(number-1);
}
};