当前位置: 首页 > news >正文

手撕一道算法题 在你面前有一个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}
    }





}


 

 

相关文章:

  • Springboot 整合tk-mybatis , 妈妈,我再也不想敲CRUD的代码了!
  • 【硬着头皮】你还在用size来判断集合是否为空?
  • 【硬着头皮】PageHelper 必须用来分页?
  • Java 使用LRUmap设计一个简单的缓存场景
  • MYSQL 查找单个字段或者多个字段重复数据,清除重复数据
  • 先了解清楚 脏读、不可重复读、幻读,再谈事务隔离机制
  • ActiveMQ 启动报错 Address already in use: JVM_Bind 5672
  • ActiveMQ 无法注入 jmsMessagingTemplate
  • ActiveMQ 报错 Could not connect to xxxxxxx , hostname can‘t be null
  • Springboot ActiveMQ 消息重发延迟时间 坑记
  • Springboot 整合 spring batch 实现批处理 ,小白文实例讲解
  • Springboot 使用Jackson 操作 json数据,各场景实例
  • Springboot 整合Websocket+Stomp协议+RabbitMQ做消息代理 实例教程
  • Java 将List<String> 转为以逗号 ‘,’ 拼接的字符串
  • Java 基于原生HttpURLConnection ,调用GET 和 POST请求 工具类
  • JavaScript 如何正确处理 Unicode 编码问题!
  • express如何解决request entity too large问题
  • Java 内存分配及垃圾回收机制初探
  • JSDuck 与 AngularJS 融合技巧
  • JS变量作用域
  • linux学习笔记
  • node-glob通配符
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • REST架构的思考
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • PostgreSQL之连接数修改
  • #pragam once 和 #ifndef 预编译头
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (003)SlickEdit Unity的补全
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转载)Linux 多线程条件变量同步
  • .Net MVC4 上传大文件,并保存表单
  • .net 怎么循环得到数组里的值_关于js数组
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .NET处理HTTP请求
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [3D基础]理解计算机3D图形学中的坐标系变换
  • [BUUCTF 2018]Online Tool
  • [HarmonyOS]第一课:从简单的页面开始
  • [Head First设计模式]策略模式
  • [HTML]Web前端开发技术28(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页
  • [LeetCode][LCR178]训练计划 VI——使用位运算寻找数组中不同的数字
  • [linux] git lfs install 安装lfs
  • [P4V]Perforce(P4V)使用教程
  • [Python人工智能] 四十二.命名实体识别 (3)基于Bert+BiLSTM-CRF的中文实体识别万字详解(异常解决中)
  • [RN] React Native 常用命令行
  • [UE4]射中机器人
  • [uniapp生命周期]详细讲解uniapp中那些属于vue生命周期,那些属于uniapp独有的生命周期,以及这中间的区别 相关的内容和api 代码注释
  • [windows phone 7开发]搭建WP7开发环境