509. 斐波那契数
1. first idea
这个贼简单。
class Solution:
def fib(self, n: int) -> int:
if n == 0:
return 0
dp = [0] * (n + 1)
dp[0] = 0
dp[1] = 1
for idx in range(2, n + 1):
dp[idx] = dp[idx - 1] + dp[idx - 2]
return dp[-1]
70. 爬楼梯
1. first idea
表示当前有多少级台阶
表示级台阶有多少种不同的爬法。
那么初始状态就是
dp[0]=0, dp[1]=1, dp[2]=2
比如说我们有3级,总共要么就是(2,1),要么就是(1,1,1) or (1, 2)
class Solution:
def climbStairs(self, n: int) -> int:
dp = [0] * (n + 1)
dp[1] = 1
if n < 2:
return dp[-1]
dp[2] = 2
for idx in range(3, n + 1):
dp[idx] = dp[idx - 1] + dp[idx - 2]
return dp[-1]
746. 使用最小花费爬楼梯
1. first idea
dp[i]表示跳到i号台阶,最小的花费。
dp[0] = 0, dp[1] = 0
class Solution:
def minCostClimbingStairs(self, cost: List[int]) -> int:
dp = [0] * (len(cost) + 1)
for idx in range(2, len(cost) + 1):
dp[idx] = min(dp[idx - 1] + cost[idx - 1], dp[idx - 2] + cost[idx - 2])
return dp[-1]