题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
解题思路
方法一:暴力
1、思路:,n级台阶的跳法总数等于n级台阶以下的台阶的跳法数的总和,可以用两个for循环求解。
2、代码:
class Solution {
public:
int jumpFloorII(int number) {
vector<int> ret(number + 1, 1);
for (int i = 2; i <= number; i++) {
for (int j = 1; j < i; j++) {
ret[i] += ret[j];
}
}
return ret[number];
}
};
3、复杂度:
时间复杂度:O();
空间复杂度:O(n)。
方法二:递推
1、思路:构造递推公式,上下相减可以得到,进一步地,,最后用快速幂求解就行了。
2、代码:
class Solution {
public:
int jumpFloorII(int number) {
int count = 2, pow = number - 1, sum = 1;
while (pow) {
if (pow & 1 == 1) {
sum = sum * count;
}
count = count * count;
pow = pow >> 1;
}
return sum;
}
};
3、复杂度:
时间复杂度:O();
空间复杂度:O(1)。