Leetcode——爬楼梯(动态规划问题)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010712012/article/details/85836732

70.爬楼梯
描述

假设你正在爬楼梯。需要 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 步

思路:
1。回溯(递归),但是这样花的时间太多了,卒
2.用递推也就是动态规划的思想,就是找到f[n] = f[n-1] + f[n-2]这种状态的方程,其实和Fibonacci数列很相似,我们设定f(0)=f(1) = 1,最终的时间复杂度就是O(N),而且只需要存储前后的数字,所以内存消耗只需要常数级别的O(1).

class Solution:
    def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        """
        x,y = 1,1
        for _ in range(1,n):  #注意这里的下划线_指的只是一个临时变量
            x,y = y, x+y  #python有个好处就是可以不用临时变量来作为交换的媒介。
        return y

下面是大神的,循环少了点时间?

class Solution:
    def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        """
        res = list()
        res = [1]
        if n >= 2:
            res.append(2)
        for i in range(2, n):
            res.append(res[i - 1] + res[i - 2])
        return res[n - 1]   

猜你喜欢

转载自blog.csdn.net/u010712012/article/details/85836732