爬楼梯问题-从暴力递归到动态规划(java)

这篇具有很好参考价值的文章主要介绍了爬楼梯问题-从暴力递归到动态规划(java)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

爬楼梯–题目描述

一个总共N 阶的楼梯(N > 0)
每次只能上一阶或者两阶。问总共有多少种爬楼方式。

示例1:
N = 1,
一步上去了,返回1.

示例2:
N = 2时。
可以第一次上一阶,再上一阶,这是一种方式,
也可以一次直接上两阶,这也是一种方式,
返回 2;

示例3:
N = 3:
可以选择, 1 1 1,
1 2
2 1
三种方式上楼,
返回3.

暴力递归

解题思路:
先确认base case:
只有一层台阶时 有1种方式,
只有两层台阶时 有两种方式,
当N 层台阶时,
当前这一步能选择上一层或者上两层两种可能性
因此f(N) = f(N - 1) + f(N - 2)
代码已经呼之欲出了:

代码演示:

  /**
     * 暴力递归。
     * @param N
     * @return
     */
    public static int paLouTi(int N){
        if (N <= 0){
            return 0;
        }
        return process(N);
    }
    /**
     * N层测楼梯 每次只能上一步或者两步,
     * 总共有多少种爬楼的方式。
     * @param N
     */
    public static int process(int N){
        //base case
        if (N == 1 || N == 2){
            return N;
        }
        return process(N - 1) + process(N - 2);
    }

递归+缓存

解题思路:
第一先找到重复计算的地方。
第二步把重复计算的放进缓存里,记忆化搜索
这个里面的重复计算我们举个例子:
f(5) = f(4) + f(3)
f(4) = f(3) + f(2)
这里面f(3)就在重复计算,
我们把他加进缓存里

代码演示

  /**
     * 递归加缓存的方式
     * @param N
     * @return
     */
    public static int paLouTi2(int N){
        if (N <= 0){
            return 0;
        }
        int[] ans = new int[N + 1];
        return process2(N,ans);
    }

    /**
     * 带缓存的递归  记忆化搜索
     * @param N
     * @param ans
     * @return
     */
    public static int process2(int N,int[]ans){
        //如果有值 直接返回 不在计算
        if(ans[N] != 0){
            return ans[N];
        }
        if(N == 1 || N == 2){
            ans[N] = N;
        }else{
            ans[N] = process2(N - 1,ans)+process2(N - 2,ans);
        }
        return ans[N];
    }

动态规划

动态规划就是在递归加缓存的基础上,做的改进,我们提前把缓存表计算出来,然后直接从缓存表里取值。

代码演示:

    /**
     * 动态规划
     * @param N
     * @return
     */
    public static int paLouTi3(int N ){
        if (N < 1){
            return 0;
        }
        //缓存表
        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];
    }
    

暴力递归到动态规划专题

走到指定位置有多少种方式-从暴力递归到动态规划(java)

零钱兑换,凑零钱问题,从暴力递归到动态规划(java)

斐波那契数列-从暴力递归到动态规划文章来源地址https://www.toymoban.com/news/detail-494948.html

到了这里,关于爬楼梯问题-从暴力递归到动态规划(java)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 暴力递归到动态规划(三)

    ⭐️ 前言 ⭐️ 本篇文章是从暴力递归到动态规划的第三章。 🍉 欢迎点赞 👍 收藏 ⭐ 留言评论 📝 私信必回哟 😁 🍉 博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言 🍉 博客中涉及源码及博主日常练习代码均已上传GitHub 题目: 给定一个二维数组mat

    2024年02月09日
    浏览(38)
  • 暴力递归到动态规划(四)

    ⭐️ 前言 ⭐️ 本篇文章是从暴力递归到动态规划篇目的最后一篇文章,包含了几道题目还有最终的大总结,相信这篇文章能让各位读者对动态规划有更深一步的了解。 🍉 欢迎点赞 👍 收藏 ⭐ 留言评论 📝 私信必回哟 😁 🍉 博主将持续更新学习记录收获,友友们有任何问

    2024年02月08日
    浏览(43)
  • 算法7.从暴力递归到动态规划0

    题意:打印n层汉诺塔从最左边移动到最右边的全部过程 解题思路: 把字母抛掉,变成左中右三个盘子 多个盘子能一下到吗?不能,把上边的拿走,最下边的才能放到指位置(leftToRight) 上边的怎么拿,leftToMid。那它具体怎么拿,midToLeft…如此,需要6个子过程 他们之间互相调

    2024年02月08日
    浏览(33)
  • 算法12.从暴力递归到动态规划5

    题意:假设有排成一行的N个位置记为1~N,N一定大于或等于2 开始时机器人在其中的M位置上(M一定是1~N中的一个) 如果机器人来到1位置,那么下一步只能往右来到2位置; 如果机器人来到N位置,那么下一步只能往左来到N-1位置; 如果机器人来到中间位置,那么下一步可以往左

    2024年02月20日
    浏览(43)
  • 算法27:从暴力递归到动态规划(2)

    上一题比较简单,下面来一道比较难的题目。 假设有排成一行的 N 个位置,记为 1~ N , N 一定大于或等于 2 开始时机器人在其中的 M 位置上 ( M 一定是 1~ N 中的一个 ) 如果机器人来到 1 位置,那么下一步只能往右来到 2 位置; 如果机器人来到 N 位置,那么下一步只能往左来到

    2024年02月09日
    浏览(38)
  • 算法|9.从暴力递归到动态规划2

    题意:规定1和A对应、2和B对应、3和C对应…26和Z对应,那么一个数字字符串比如\\\"111”就可以转化为:“AAA”、“KA\\\"和\\\"AK” 给定一个只有数字字符组成的字符串str,返回有多少种转化结果 解题思路: 边界判断1:能够不被阻挡的走到最后,说明这个决策正确,返回1 边界判断2:0不

    2024年02月03日
    浏览(41)
  • 算法8.从暴力递归到动态规划1

    目前感觉,背包问题和货币数组问题本质相同,货币的与dp相关的三种代码写完了,快复习不完了,背包暂时先不写了,回头再写,补充,再总结,结合那个C++大神的文章再弄。 目前来讲,我接触到的背包问题有四种分别是01背包、完全背包、多重背包、以及部分背包。背包

    2024年02月07日
    浏览(37)
  • 一篇文章带你搞懂动态规划(由暴力递归到动态规划)

    ”动态规划“ 的过程相当于 记忆化搜索 , 即在普通 递归 的过程中用二维数组进行记忆化存储一些状态结果, 从而避免重复的计算(剪枝)。 举一个简单的例子:在 递归法 求解 斐波那契 数列的过程中, 就进行了多次的 重复计算 , 而动态规划相当于是对已经计算的状态

    2024年02月20日
    浏览(55)
  • 题解 | #上台阶#C++暴力动态规划解法,非递归

    25届想找实习求看看简历 英伟达笔试 Nvidia24秋招 英伟达嵌入式软件工程师笔试 9-26 2022-08-17-nvidia实习 我发现算法岗也不很难进啊(深度学习) 我发现算法岗也不很难进啊(深度学习) 顺丰科技 1.30校招实习招聘信息汇总 2024春招汇总 『 哨哥的校园招聘周报 』02/05 - 02/18 深圳银河创

    2024年02月21日
    浏览(38)
  • 【LeetCode:72. 编辑距离 | 暴力递归=>记忆化搜索=>动态规划 】

    🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,CSDN-Java领域新星创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文

    2024年02月06日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包