class Solution:
def fib(self, n: int):
if n <= 1:
return n
dp = [0, 1]
for i in range(2, n + 1):
tmp = dp[0] + dp[1]
dp[0] = dp[1]
dp[1] = tmp
return dp[1]
递归
class Solution:
@cache
def climbStairs(self, n: int):
if n <= 2 :
return n
return self.climbStairs(n - 1) + self.climbStairs(n - 2)
动态规划
class Solution:
def climbStairs(self, n: int):
if n <= 2:
return n
dp = [1, 2]
for i in range(3, n + 1):
tmp = dp[0] + dp[1]
dp[0] = dp[1]
dp[1] = tmp
return dp[1]
递归
class Solution:
def minCostClimbingStairs(self, cost: List[int]):
@cache
def dfs(i):
if i <= 1:
return 0
return min(dfs(i - 1) + cost[i - 1], dfs(i - 2) + cost[i - 2])
n = len(cost)
return dfs(n)
动态规划
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
int n = cost.size();
if (n <= 1) return 0;
vector<int> dp(n + 1, 0);
for (int i = 2; i <= n; i++) {
dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);
}
return dp[n];
}
};