版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010712012/article/details/85836732
70.爬楼梯
描述
假设你正在爬楼梯。需要 n 步你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
示例1
输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
- 1 步 + 1 步
- 2 步
示例2
输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
- 1 步 + 1 步 + 1 步
- 1 步 + 2 步
- 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]