【力扣】刷题备忘录-动归-70.爬楼梯

70. 爬楼梯 - 力扣(LeetCode)

class Solution {
public:
    int climbStairs(int n) {
        if (n <= 1) return n; // 异常处理
        vector<int> dp(n+1); // 定义一个由int组成的可变的变量 的意思
                            // 之所以定义为n+1 主要是为了下面让dp[1]表示第一个台阶 方便理解
        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[i - 1]  dp[i - 2]两个变量值都存到 dp[1] dp[2]中存起来的方法,节约空间复杂度。一刷先这样~ 这样最有动归的感觉。

代码随想录的 动归模板:

1. 先看懂dp table 和 下标的含义:只需要知道并自己定义清楚dp[i]的意思 和 i的意思

2. 确定递推公式:dp[i] = dp[i-1] + dp[i-2] 

3. dp数组初始化:

4. 确定遍历顺序:感觉和2有点像

5. 举例推导dp 数组:和1不一样的地方在于,这里需要用实例推几个出来。可以用于出错时检查输出是否和dp一致。

这里不知道刷到后面能不能把这个步骤再抽象一下,或者改改顺序。感觉目前刷动归都要先做第5步才能写出2。

PS:

1. 之前都是用的python,借着刷题的机会学一下C++,让自己更有刷题的动力一些。

2. 力扣这些知识真的很无聊啊,但是为啥面试一定要看GPT随便就能取代的东西啊

3. 说是要从简单题抽象出复杂概念来是不行的啊 没办法验证自己抽出来的是不是适用的。

4. 或许还是得二刷,第一遍就不要追求完全能搞懂,能AC明白逻辑就可以。话说回来,这条也有待验证。。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值