题目:
解答:
方法一:
class Solution:
def climbStairs(self, n: int) -> int:
if n<3:
return n
a=1
b=2
for i in range(3,n+1):
tmp=a+b
a=b
b=tmp
return b
方法二:动态规划
(1)原始解答
class Solution:
def climbStairs(self, n: int) -> int:
if n<3:
return n
dp=[0]*(n+1)
dp[1]=1
dp[2]=2
for i in range(3,n+1):
dp[i]=dp[i-1]+dp[i-2]
return dp[n]
(2)看作 完全背包问题,进行求解
class Solution:
def climbStairs(self, n: int) -> int:
#dp[i]: 凑成目标正整数为i的排列个数
dp=[0]*(n+1)
dp[0]=1
#先遍历背包,再遍历物品,以求排列
for j in range(1,n+1):
for step in range(1,3):
if j>=step:
dp[j]+=dp[j-step]
return dp[n]