C++
本题是斐波那契数列的变种;
第n级台阶有两种跳法: 从n-1级跳1级 + 从n-2级跳2级;
因此 f[n]=f[n-1] + f[n-2];
推知:
n=0-------1
n=1-------1
n=2-------f[0]+f[1]=2;
三种方法:
动态规划、递归、直接数组保存(但这里未说明n范围,担心会超时)---参考JZ7
1动态规划:
class Solution {
public:
int jumpFloor(int number) {
int tmp0=1, tmp1=1, ans;
if (number ==0 || number == 1) return 1;
for (int i=1; i<number; i++){
ans = tmp0 + tmp1;
tmp0 = tmp1;
tmp1 = ans;
}
return ans;
}
};2-递归
public:
int jumpFloor(int number) {
if (number==0 || number==1) return 1;
return jumpFloor(number-1)+jumpFloor(number-2);
}
}; 加入优化
class Solution {
public:
int Fib(int n, vector<int> &dp){
if (n==0 || n==1) return 1;
if (dp[n] != -1) return dp[n] ;
return dp[n]=Fib(n-1, dp) + Fib(n-2,dp);
}
int jumpFloor(int number) {
vector<int> dp(number+1, -1);
return Fib(number, dp);
}
};3-利用数组,这里默认1000,其实是不合理的
class Solution {
public:
int jumpFloor(int number) {
int f[1000] = {0};
f[0]=1;
f[1]=1;
for(int i=2; i<number+1; i++){
f[i]=f[i-1]+f[i-2];
}
return f[number];
}
};
京公网安备 11010502036488号