LeetCode 70 [Climbing Stairs]

原题

假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?

比如n=3,1+1+1=1+2=2+1=3,共有3中不同的方法
返回 3

解题思路

  • 本题本质和菲波那切数列问题非常相似
  • 单序列型动态规划问题 - Sequence DP
  • cache[i]表示有i个台阶,能跳到第i个台阶的方案个数
  • 因为每次可以跳一步或者跳两步,所以cache[i]就等于下面的和
  • 可以跳的i - 1的方案个数即cache[i - 1]
  • 可以跳到i - 2的方案个数即cache[i - 2]

完整代码

class Solution(object):
    def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        """
        if n < 1:
            return 0
        if n == 1:
            return 1
        if n == 2:
            return 2
        cache = [0 for i in range(n)]
        cache[0] = 1
        cache[1] = 2
        for i in range(2, n):
            cache[i] = cache[i - 1] + cache[i - 2]
        return cache[n - 1]

你可能感兴趣的:(LeetCode 70 [Climbing Stairs])