zoukankan      html  css  js  c++  java
  • [编程题] lc[70. 爬楼梯

    [编程题] lc:70. 爬楼梯

    题目描述

    image-20200719003518528

    输入输出例子

    image-20200719003534078

    方法1:普通递归

    思想:化为子问题

    Java代码

    //方法1:普通递归
        public int climbStairs(int n) {
            if(n==1){return 1;}
            if(n==2){
                return 2;
            }else{
                return climbStairs(n-1)+climbStairs(n-2);
            }
        }
    

    方法2:滑动数组(指针从左往右滑动)
    思想:让三个指针p q r,构成滑动数组,不断从左往右滑动;其中p指向n=1情况的值的前一个节点,q指向n=1的情况,r指向n=2的情况
    见图解:

     //方法2:滑动数组的方式(从左往右滑)
         public int climbStairs3(int n) {
             int p = 0;   //pre节点指针
             int q = 1;  //相当于n=1的情况的指针
             int r = 2;  //相当于n=2的情况的指针
             for(int i=1;i<n;i++){  //传入2,只需要移动1次,传入3,只需移动2次
                 p = q;
                 q = r;
                 r = p+q;
             }
             return q;
        }
    

    方法2:滑动数组(指针从右往左滑动)

    思想:让三个指针p q r,构成滑动数组,不断从右往左滑动;

    Java代码

    //方法2:滚动数组
        public int climbStaires2(int n){
            int p,q=0;int r=1;
            for (int i = 0; i < n; i++) {
                p = q;
                q = r;
                r = p+q;
            }
            return r;
        }
    

    方法4:满足斐波那契直接使用数学公式

    公式:

    image-20200719003821166

    代码

    //方法3:发现构造的这个数组符合斐波那契数列,直接用公式
        public static double climbStaires3(int n){
            int[] arr = {1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89};
            double sqrt = Math.sqrt(5);
            return (int)(1/sqrt *(Math.pow((1+sqrt)/2,n+1)-Math.pow((1-sqrt)/2,n+1)));
        }
    

    方法4:动态规划

    思想:

    image-20200719003908500

    代码

    //方法2:动态规划(空间换时间)
         public int climbStairs2(int n) {
            if(n<=2){return n;}
            //n>=3的情况使用dp处理
            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];
         }
    
    
  • 相关阅读:
    启动 Appium 自带模拟器
    Android的一些常用命令提示符(cmd)指令
    Eclipse中没有andriod问题解决方法
    selenium键盘操作
    鼠标事件
    appium运行from appium import webdriver 提示most recent call last
    appium for windows 环境搭建
    python+Eclipse+pydev环境搭建
    nmon和nmon analyser的下载和使用
    Linux下使用NMON监控、分析系统性能
  • 原文地址:https://www.cnblogs.com/jiyongjia/p/13338345.html
Copyright © 2011-2022 走看看