• LeetCode 70. 爬楼梯


    70. 爬楼梯

    Difficulty: 简单

    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

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

    注意:给定 n 是一个正整数。

    示例 1:

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

    示例 2:

    输入: 3
    输出: 3
    解释: 有三种方法可以爬到楼顶。
    1.  1 阶 + 1 阶 + 1 阶
    2.  1 阶 + 2 阶
    3.  2 阶 + 1 阶
    

    Solution

    非递归版本

    首先我们考虑最简单的情况。如果只有 1 级台阶,那显然只有一种跳法。
    如果有2级台阶,那就有两种跳的方法了:一种是分两次跳,每次跳1级;
    另外一种就是一次跳2级。接着我们再来讨论一般情况。
    我们把n级台阶时的跳法看成是n的函数,记为f(n)。
    当n>2时,第一次跳的时候就有两种不同的选择:一是,一次只跳1级,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,即为f(n-1);
    另外一种选择是第一次跳2级,此时跳法数目等于后面剩下的n-2级台阶的跳法数目,即为f(n-2)。因此n级台阶的不同跳法的总数f(n)=f(n-1)+f(n-2)。
    分析到这里,我们不难看出这实际上就是斐波那契数列了。

    class Solution:
        def climbStairs(self, n: int) -> int:
            if n <= 1:
                return 1
            t_1, t_2 = 1, 1
            for _ in range(2, n+1):
                fN = t_1 + t_2
                t_1 = t_2
                t_2 = fN
            return fN
    

    递归版本,注意递归的解法会遇到超时无法通过的情况。仅仅做参考。

    class Solution:
        def climbStairs(self, n: int) -> int:
            if n <= 1:
                return 1
            if n == 2:
                return 2
            return self.climbStairs(n-1) + self.climbStairs(n-2)
    
  • 相关阅读:
    Valid Anagram
    数据结构与算法2016-06-02
    数据结构与算法2016-06-03
    Delete Node in a Linked List
    Move Zeroes
    Javascript 常用的工具函数,更新中...
    有用的Javascript,长期更新...
    sql基本语法
    Javascript 有用的奇淫技巧
    关于 Vue 的一些问题(面试中面试官想听到的答案)
  • 原文地址:https://www.cnblogs.com/swordspoet/p/14511699.html
Copyright © 2020-2023  润新知