代码随想录第38天|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

87 阅读1分钟

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[i]=dp[i1]+dp[i2]dp[i]=dp[i-1]+dp[i-2]

ii表示当前有多少级台阶 dp[i]dp[i]表示ii级台阶有多少种不同的爬法。 那么初始状态就是 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[i]=min(dp[i1]+cost[i1],dp[i2]+cost[i2])dp[i]=min(dp[i-1] + cost[i - 1], dp[i-2] + cost[i-2])

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]