这题用到动态规划,分三种情况:
n=1:有一种方法
n=2:有两种方法,1+1和2
n>2:递归前面两种情况即f(n-1)+f(n-2)
一开始这样写然后超时了:
// An highlighted block
class Solution {
public:
int climbStairs(int n) {
long long sum=fun(n);
return sum;
}
long long fun(int n){
long long num=0;
if(n==1){
num=1;
}
if(n==2){
num=2;
}
if(n>2){
num=fun(n-1)+fun(n-2);
}
return num;
}
};
看了题解和别人的解法要开一个数组去存储然后写循环:
// An highlighted block
class Solution {
public:
int climbStairs(int n) {
int f[50];
f[1]=1;
f[2]=2;
// if(n==1||n==2){
// f[n]=n;
// }
//一开始这样写但其实当n>3时并没有进入到循环,f[1]和f[2]的值并没有被初始化
for(int i=3;i<=n;i++){
f[i]=f[i-1]+f[i-2];
}
return f[n];
}
};