动态规划-爬楼梯

文章讲述了如何通过动态规划解决LeetCode中的爬楼梯问题,指出递归中存在大量重复计算,通过备忘录技术(存储中间结果)优化算法,降低时间复杂度。作者还分享了将此解决方案部署到腾讯云开发者社区的计划。
摘要由CSDN通过智能技术生成

一道经典的动态规划题目爬楼梯

. - 力扣(LeetCode)

我们知道,按照题目描述,我们可以知道

  • n = 1 : 可以有一种走法,走一阶台阶。总共有一种走法
  • n = 2: 可以有两种走法,走一阶在走一阶 或者是 一次走两阶。总共有两种走法
  • n = 3: 可以有三种走法,走一阶在走一阶在走一阶 或者 第一次走两阶 第二次走一阶 或者第一次走一阶第二次走两阶。总共有三种走法。

由此可见,当n < =3的时候 走法的是等于n的。所以我们用这个思路开写!!!

class Solution {
    public int climbStairs(int n) {
        return n > 3 ? climbStairs(n - 1) + climbStairs(n - 2) : n;

    }
}

vocal!超时了什么情况!!

哦! 我想起来了,假如n为4的时候,climbStairs(n - 1) 和climbStairs(n - 2) 他们之间存在大量重复的计算。在这里 climbStairs(n - 1),n减一在减一之后为2 这里得计算climbStairs(2)的值。

在climbStairs(n - 2)里,n-2 后 也得计算一遍 climbStairs(2),所以当这个n的值很大的时候,这个时间的消耗就会膨胀的很快。

所以我们就可以想办法把这个值提前给记录下来,不用重复去计算。类似备忘录。

class Solution {
    public int climbStairs(int n) {
        if(n <= 3){
            return n;
        }
        int[] dp = new int[n + 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];
    }
}

当 n <= 3时,走法就是等于n。然后我们先把走一阶和走两阶的走法存在dp数组里面。

然后我们可以自底向上,逐渐靠近n,在数组里依次记录前i个台阶总共有几种走法。

最后大功告成完成!!!

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1vq20gbk2eut1

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值