class Solution {
public:
// 动态规划解法--递归
vector<int> dp;// 用来记录已经计算过的结果,避免重复计算
int climbStairs(int n) {
// 当dp为空时,申请空间(仅需要做一次该操作)
if (dp.empty()) dp.resize(n+1);
if (n == 1 || n == 2) return n;// 特殊情况处理
if (dp[n] == 0){
// 减少重复递归计算
dp[n] = climbStairs(n-1) + climbStairs(n-2);
}
return dp[n];
}
// 迭代解法
int climbStairs(int n) {
if (n == 1 || n == 2){
return n;
}
int prev = 1;// 台阶1
int cur = 2;// 台阶2
for (int i = 3; i <= n; ++i){
int res = prev + cur;
prev = cur;
cur = res;
}
return cur;
}
};
LeetCode 70. 爬楼梯 C++
最新推荐文章于 2023-05-07 20:34:13 发布