leetcode Climbing Stairs

本文探讨了经典的爬楼梯问题,从错误的理解出发,逐步介绍了递归、动态规划等算法解决方案,并对每种方法进行了详细分析,最终给出了优化后的动态规划实现。

 看到此题,首先想到的是递归求解,但是题意理解错了,题中是说需要n 步到达山顶,每一次可以是一步或者两步,而我理解的是n次中每一次可以是一步或者两步

错误的递归代码如下

class Solution {
public:
    int climbStairs(int n) {
        num = 0;
        if(n==0)
            return num;
        climbStairsHelper(n);
        return num;
    }
    
    void climbStairsHelper(int n)
    {
        if(n==0)
        {
            num++;
            return;
        }
        //choose 1 step
        climbStairsHelper(n-1);
        //choose 2 step
        climbStairsHelper(n-1);
    }
    
private:
    int num;
};



 正确的递归代码但是超时

class Solution {
public:
    int climbStairs(int n) {
       if(n==0)
        return 0;
       if(n==1)
        return 1;

        return climbStairs(n-1)+climbStairs(n-2);
    }

};


一般情况下递归算法超时后,可以利用动态规划来解决,保留中间结果

动态规划的代码如下 通过

class Solution {
public:
    int climbStairs(int n) {
       vector<int> result(n+1, 0);
       if(n==0)
        return result[n];
       
       result[0] = 1;
       result[1] = 1;
        
       for(int i = 2; i <= n; ++i)
         result[i] = result[i-1] + result[i-2];
         
       return result[n];
    
    }

};


分析代码注意到,其实每次只用了三个变量

优化后的动态规划代码

class Solution {
public:
    int climbStairs(int n) {
       if(n==0)
        return 0;
       
       int a = 1;
       int b = 1;
       int c = 1;
        
       for(int i = 2; i <= n; ++i)
       {
         c = a + b;         
         a = b;
         b = c;
       }
         
       return c;
    
    }

};



无界云图(开源在线图片编辑器源码)是由四川爱趣五科技推出的一款类似可画、创客贴、图怪兽的在线图片编辑器。该项目采用了React Hooks、Typescript、Vite、Leaferjs等主流技术进行开发,旨在提供一个开箱即用的图片编辑解决方案。项目采用 MIT 协议,可免费商用。 无界云图提供了一系列强大的图片编辑功能,包括但不限于: 素材管理:支持用户上传、删除和批量管理素材。 操作便捷:提供右键菜单,支持撤销、重做、导出图层、删除、复制、剪切、锁定、上移一层、下移一层、置顶、置底等操作。 保存机制:支持定时保存,确保用户的工作不会丢失。 主题切换:提供黑白主题切换功能,满足不同用户的视觉偏好。 多语言支持:支持多种语言,方便全球用户使用。 快捷键操作:支持快捷键操作,提高工作效率。 产品特色 开箱即用:无界云图采用了先进的前端技术,用户无需进行复杂的配置即可直接使用。 免费商用:项目采用MIT协议,用户可以免费使用和商用,降低了使用成本。 技术文档齐全:提供了详细的技术文档,包括技术文档、插件开发文档和SDK使用文档,方便开发者进行二次开发和集成。 社区支持:提供了微信技术交流群,用户可以在群里进行技术交流和问题讨论。 环境要求 Node.js:需要安装Node.js环境,用于运行和打包项目。 Yarn:建议使用Yarn作为包管理工具,用于安装项目依赖。 安装使用 // 安装依赖 yarn install // 启动项目 yarn dev // 打包项目 yarn build 总结 无界云图是一款功能强大且易于使用的开源在线图片编辑器。它不仅提供了丰富的图片编辑功能,还支持免费商用,极大地降低了用户的使用成本。同时,详细的文档和活跃的社区支持也为开发者提供了便利的二次开发和集成条件。无论是个人用户还是企业用户,都可以通过无界云图轻
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值