3道题目
509. 斐波那契数
70. 爬楼梯
746. 使用最小花费爬楼梯
解题理解
509
经典入门题,也可以用递归做
class Solution:
def fib(self, n: int) -> int:
if n <= 0:
return n
dp = [0] * (n + 1)
dp[0] = 0
dp[1] = 1
for i in range(2, n + 1):
dp[i] = dp[i - 1] + dp[i - 2]
return dp[n]
70
稍微写几种情况应该可以发现跟斐波那契数列是一个问题,只是不需要考虑dp[0]
class Solution:
def climbStairs(self, n: int) -> int:
if n <= 2:
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]
746
一开始以为,状态转移公式是dp[i] = min(dp[i - 1], dp[i - 2]),忘记把cost加进来
class Solution:
def minCostClimbingStairs(self, cost: List[int]) -> int:
dp = [0] * (len(cost) + 1)
dp[0] = 0
dp[1] = 0
for i in range(2, len(cost) + 1):
dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2])
return dp[len(cost)]