手撕一道算法题 在你面前有一个n阶的楼梯,你一步只能上1阶或2阶。请问,当N=11时,你可以采用多少种不同的方式爬完这个楼梯();当N=9时呢?

简介: 手撕一道算法题 在你面前有一个n阶的楼梯,你一步只能上1阶或2阶。请问,当N=11时,你可以采用多少种不同的方式爬完这个楼梯();当N=9时呢?

前言



今天偶然看到群里有小伙伴在讨论这道算法题,说实话算法题写的确实有些少了近期,都在忙着搬砖,所以简单做个记录。


题:



在你面前有一个n阶的楼梯,你一步只能上1阶或2阶。请问,当N=11时,你可以采用多少种不同的方式爬完这个楼梯();当N=9时呢?



核心思路,拆解:


到达台阶 11时,有可能是通过走 1阶上来的 ;也可能是走2阶上来的;


所以统计出到达 台阶11,也就是统计出 到达10阶  + 到达9阶 的 方法总数。


那么到达10阶,同样 有可能是通过走 1阶上来的 ;也可能是走2阶上来的;


所以统计出到达 台阶10,也就是统计出 到达 9 阶  + 到达 8 阶 的 方法总数。


那么到达9阶,同样 有可能是通过走 1阶上来的 ;也可能是走2阶上来的;


所以统计出到达 台阶9,也就是统计出 到达 8 阶  + 到达 7 阶 的 方法总数。


一样以此类推......


那么到达3阶,同样 有可能是通过走 1阶上来的 ;也可能是走2阶上来的;


所以统计出到达 台阶3,也就是统计出 到达2 阶  + 到达 1 阶 的 方法总数。


而到达2阶,方法总数有两种, 分两次 1 台阶走 或者 一次走 2  台阶;


而到达1阶,方法总数有一种, 一次走 1 台阶;


代码解:


public class Test {
    public static void main(String[] args) {
        //解法1
        Integer result1 = getMethodLoop(11);
        System.out.println(result1); //144
        //解法2
        Integer result2=getSumMethods(11);
        System.out.println(result2); //144
    }
    public  static int getMethodLoop(int sum){
        if (sum==1 ){
            return 1;
        }else if (sum==2){
            return 2;
        }else {
            int m1=sum-1;
            int m2=sum-2;
            int result=  getMethodLoop(m1)+getMethodLoop(m2);
            return  result;
        }
    }
    private static Integer getSumMethods(int sum) {
        Map<String,Integer> map=new HashMap<>();
        map.put("1",1);
        map.put("2",2);
        for (int i=3;i<=sum;i++){
            Integer m1=i-1;
            Integer m2=i-2;
            Integer m1Value = map.get(String.valueOf(m1)) ;
            Integer m2Value = map.get(String.valueOf(m2))  ;
            map.put(String.valueOf(i),m1Value+m2Value);
        }
        System.out.println(map.toString());
       return  map.get(String.valueOf(sum));
        //{11=144, 1=1, 2=2, 3=3, 4=5, 5=8, 6=13, 7=21, 8=34, 9=55, 10=89}
    }
}
相关文章
|
机器学习/深度学习 算法
阿旭机器学习实战【1】K-近邻算法(KNN)模型应用实例,以及图像表征方式
阿旭机器学习实战【1】K-近邻算法(KNN)模型应用实例,以及图像表征方式
阿旭机器学习实战【1】K-近邻算法(KNN)模型应用实例,以及图像表征方式
|
存储 机器学习/深度学习 自然语言处理
【算法的特性,标准,时间维度空间维度计算方式】
【算法的特性,标准,时间维度空间维度计算方式】
286 0
【算法的特性,标准,时间维度空间维度计算方式】
|
算法 开发者
数据结构和算法-二叉树三种遍历方式|学习笔记
快速学习数据结构和算法-二叉树三种遍历方式
172 0
数据结构和算法-二叉树三种遍历方式|学习笔记
|
缓存 负载均衡 算法
5种限流算法,7种限流方式,挡住突发流量?(一)
5种限流算法,7种限流方式,挡住突发流量?
514 0
5种限流算法,7种限流方式,挡住突发流量?(一)
|
机器学习/深度学习 算法
【刷穿 LeetCode】求「连通图经过所有点的最短路径」的三种方式 :「BFS」&「Floyd + 状压 DP」 &「AStar 算法」
【刷穿 LeetCode】求「连通图经过所有点的最短路径」的三种方式 :「BFS」&「Floyd + 状压 DP」 &「AStar 算法」
|
存储 算法 Java
5种限流算法,7种限流方式,挡住突发流量?(二)
5种限流算法,7种限流方式,挡住突发流量?
290 0
5种限流算法,7种限流方式,挡住突发流量?(二)
|
自然语言处理 算法 Java
【Java数据结构及算法实战】系列002:算法的四种描述方式
本节是《Java数据结构及算法实战》系列的第2节,主要介绍描述算法的常用的4种方式。 要定义一个算法,我们可以用自然语言、流程图、伪代码的方式描述解决某个问题的过程或是编写一段程序来实现这个过程。比如,在前面所举的“学生信息管理系统”例子中,我们希望实现添加用户、删除用户、查询用户三个算法。
395 0
【Java数据结构及算法实战】系列002:算法的四种描述方式
|
消息中间件 缓存 负载均衡
5种限流算法,7种限流方式,挡住突发流量?(三)
5种限流算法,7种限流方式,挡住突发流量?
752 0
|
算法 Python
ML之xgboost:利用xgboost算法(自带方式)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)
ML之xgboost:利用xgboost算法(自带方式)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)
ML之xgboost:利用xgboost算法(自带方式)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)
|
SQL 算法 关系型数据库
MySQL 分页优化中的 “ INNER JOIN方式优化分页算法 ” 到底在什么情况下会生效?
最近无意间看到一个 MySQL 分页优化的测试案例,并没有非常具体地说明测试场景的情况下,给出了一种经典的方案。因为现实中很多情况都不是固定不变的,能总结出来通用性的做法或者说是规律,是要考虑非常多的场景的;同时,面对能够达到优化的方式要追究其原因,同样的做法,换了个场景,达不到优化效果的,还要追究其原因。
6831 0
下一篇
无影云桌面