当前位置:首页 > 编程笔记 > 正文
已解决

LeetCode 70.爬楼梯 + 记忆化搜索 + 递推 + 动态规划 + 空间优化

来自网友在路上 184884提问 提问时间:2023-11-03 05:32:36阅读次数: 84

最佳答案 问答题库848位专家为你答疑解惑

关于此题的我的往期文章:

leetCode 70.爬楼梯 动态规划_呵呵哒( ̄▽ ̄)"的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_41987016/article/details/133325224?spm=1001.2014.3001.5501

  • i-1层楼梯,有 dfs(i-1) 种方法,那么再一步跳一个台阶就是 dfs(i)
  • i-2层楼梯,有 dfs(i-2) 种方法,那么再一步跳两个台阶就是 dfs(i)

也就是说可以求出 dfs(i),即 dfs(i) = dfs(i-1) + dfs(i-2)

(1) 递归(超时)

class Solution {
public:// 递归int climbStairs(int n) {function<int(int)> dfs=[&](int i) -> int {if(i==0 || i==1) return 1;return dfs(i-1) + dfs(i-2);};return dfs(n);}
};

(2)递归搜索 + 保存计算结果 = 记忆化搜索

class Solution {
public:// 记忆化搜索int climbStairs(int n) {vector<int> memo(n+2,-1);function<int(int)> dfs=[&](int i) -> int {if(i==0 || i==1) return 1;int &res = memo[i];if(res != -1) return res;return res=dfs(i-1) + dfs(i-2);};return dfs(n);}
};

(3)1:1 翻译成递推

  • dfs(i)=dfs(i-1)+dfs(i-2)

  • f(i)=f(i-1)+f(i-2)

  • f(i+2)=f(i+1)+f(i)

class Solution {
public:// 递推int climbStairs(int n) {vector<int> f(n+2,0);f[0]=1;f[1]=1;for(int i=0;i<=n-2;i++) f[i+2] = f[i+1] + f[i];return f[n];}
};
class Solution {
public:// 递推int climbStairs(int n) {vector<long> f(n+1,0);f[0]=1;f[1]=1;for(int i=2;i<=n;i++) f[i] = f[i-1] + f[i-2];return f[n];}
};
  • 空间优化
class Solution {
public:// 递推int climbStairs(int n) {int f0=1,f1=1,sum;for(int i=2;i<=n;i++) {sum = f0+f1;f0 = f1;f1=sum;}  return f1;}
};

(4)动态规划

class Solution {
public:
int climbStairs(int n) {if(n<=1) return n;// 因为下面直接对dp[2] 操作了,防止空指针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];}
};

 

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"LeetCode 70.爬楼梯 + 记忆化搜索 + 递推 + 动态规划 + 空间优化":http://eshow365.cn/6-30814-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!