Leetcode刷题笔记36-爬楼梯

1. 题目

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

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

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

2. 示例

示例 1:

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

示例 2:

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

3. 解答

python3

(1)思路:这个问题的解题思路和斐波那契数列数列是一样的。用递归实现会超出时间限制

class Solution(object):
    def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        """
        if n == 1:
            return 1
        if n == 2:
            return 2
        return self.climbStairs(n-1) + self.climbStairs(n-2)

res = Solution().climbStairs(5)
print(res)

(2)用循环代替递归

实现1:

class Solution(object):
    def climbStairs(self, n):
        t = [0]*(n+1)
        t[0] = 0
        t[1] = 1
        if n == 1: return t[1]      #####
        t[2] = 2
        if n <= 2: return t[n]
        for i in range(3, n+1):
            t[i] = t[i-1] + t[i-2]
        return t[n]

实现2:

class Solution(object):
    def climbStairs(self, n):
        pre, cur = 0, 1
        for i in range(n):
            pre, cur = cur, pre+cur
        return cur

猜你喜欢

转载自www.cnblogs.com/Joyce-song94/p/9192179.html
今日推荐