Leetcode地址:70. 爬楼梯 - 力扣(LeetCode) (leetcode-cn.com)
动态规划:
解法1:
时间复杂度O(N)
空间复杂度O(N)
代码如下:
class Solution(object):
def climbStairs(self, n):
"""
:type n: int
:rtype: int
"""
#f(n)=f(n-1)+f(n-2)
#f(1)=1,f(2)=2
f=[0,1,2]
if n==1 or n==2:
return f[n]
for i in range(3,n+1):
f.append(f[i-1]+f[i-2])
return f[n]
解法2:
时间复杂度O(N)
空间复杂度O(1)
代码如下:
class Solution(object):
def climbStairs(self, n):
"""
:type n: int
:rtype: int
"""
#f(n)=f(n-1)+f(n-2)
#f(0)=1,f(1)=1
x,y=1,1
#n>=1
for _ in range(1,n):
#向右移动一步,新的x等于旧的y,新的y等于原x+y
x,y=y,x+y
return y