美文网首页
70. 爬楼梯

70. 爬楼梯

作者: 水中的蓝天 | 来源:发表于2022-08-01 11:22 被阅读0次

    70. 爬楼梯

    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
    每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

    
    示例 1:
    输入:n = 2
    输出:2
    解释:有两种方法可以爬到楼顶。
    1. 1 阶 + 1 阶
    2. 2 阶
    
    

    思路:第n个台阶只能从第n-1或者n-2个上来。到第n-1个台阶的走法 + 第n-2个台阶的走法 = 到第n个台阶的走法,已经知道了第1个和第2个台阶的走法,一路加上去 递推公式: f(n) = f(n-1) + f(n-2)

    
    class Solution {
    
        //方法一:记忆递归 O(n) O(n)
        public int climbStairs1(int n) {
            int[] memo = new int[n+1];
            return climbStairsMemo(n,memo);
        }
    
        private int climbStairsMemo(int n,int[] memo) {
    
            //1.爬到第n级的台阶已经计算过了,直接返回
            if(memo[n] > 0) {
                return memo[n];
            }
    
            //2.计算爬第N级台阶的方法有多少种
            if(n==1){ 
                return 1;
            } else  if(n==2) { 
                return 2;
            }else{
                memo[n] = climbStairsMemo(n-1,memo) + climbStairsMemo(n-2,memo);
            }
    
            return memo[n];
    
        }
    
        //方法二:斐波那契数列 O(n) O(1)
        public int climbStairs(int n) {
    
           if(n==1) return 1;
           int first = 1;
           int second = 2;
           for(int i = 3; i <= n;i++) {
               int tmp = first + second;
               first = second;
               second = tmp;
           }
    
           return second;
    
        }
    
    }
    
    

    进阶 : 每次你可以爬 1 或 4 个台阶呢。你有多少种不同的方法可以爬到楼顶呢?

    进阶: 每次你可以爬 1 或 9 个台阶呢。你有多少种不同的方法可以爬到楼顶呢?

    分析: 改变了第二种走法的台阶数递推公式还适用吗 ? 其实还是适用的 具体可以看下面的推导 不要被改变一个值迷惑

    //1 1
    //2 1
    //3 1
    //4 2
    //5 11111 14 41 3
    //6 111111 141 114 411  5
    //7 (n-1)+(n-2) 8
    
    

    相关文章

      网友评论

          本文标题:70. 爬楼梯

          本文链接:https://www.haomeiwen.com/subject/qcbtirtx.html