看到题目思绪一下子回到一年前,刚刚准备放弃硬件搞软件
看翁凯的MOOC,会写的第一个递归!哈哈哈
时光过得真快,而我依旧这么菜!!!
递归当然超时:
class Solution {
public:
int climbStairs(int n) {
if(n==0||n==1)
return 1;
return climbStairs(n-1)+climbStairs(n-2);
}
};
改用DP:
class Solution {
public:
int climbStairs(int n) {
if(n<=2)
return n;
vector<int> dp(n+1,0);
dp[1] = 1;
dp[2] = 2;
for(int i=3;i<=n;i++){
dp[i] = dp[i-1]+dp[i-2];
}
return dp[n];
}
};
斐波拉契数列
有了前面的基础,这个DP就很容易了
class Solution {
public:
int climbStairs(int n) {
if(n<=2)
return n;
vector<int> dp(n+1,0);
dp[1] = 1;
dp[2] = 2;
for(int i=3;i<=n;i++){
dp[i] = dp[i-1]+dp[i-2];
}
return dp[n];
}
};
https://send.firefox.com/download/6c8236d1565e58c8/#i7FdEF_GCzTCb_FX4sgVyA