时间限制:1秒空间限制:32768K
通过比例:35.42%
最佳记录:0 ms|8552K (来自 烧包谷)
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
一般解法:
f(n) = f(n-1) + f(n-2) + ··· + f(1) + 1;
令dec = f(n-1); sum = f(n-2) + ··· + f(1) + 1;
通过
1.sum += dec;
2.dec = sum;
3.f(n+1) = dec + sum;
迭代求解:
class Solution {
public:
int jumpFloorII(int number) {
int sum = 0, dec;
if( number == 1) {
return 1;
}
else if(number == 2) {
return 2;
}
else if(number == 3) {
return 4;
}
for(int i = 3; i <= number; i++) {
if(i == 3) {
sum = 2;
dec = 2;
}
else {
sum += dec;
dec = sum;
}
}
return sum + dec;
}
};
最优解:
可以看到其实dec == sum
,故此:利用指数函数 pow(x, y)
= x ^ y
解法如下:
class Solution {
public:
int jumpFloorII(int number) {
return pow(2, number -1);
}
};