leetcode/notes/src/dynamic-programming-basic.md

1.4 KiB

基础问题

509. 斐波那契数

  1. dp[i] 是第 i 个斐波那契数的数值
  2. dp[i] = dp[i - 1] + dp[i - 2]
  3. dp[0] = 0, dp[1] = 1
  4. 从前向后遍历

70. 爬楼梯

  1. dp[i] 是爬到第 i 阶楼梯的方法数
  2. dp[i] = dp[i - 1] + dp[i - 2]
  3. dp[1] = 1, dp[2] = 2, dp[0] 不用管
  4. 从前向后遍历

746. 使用最小花费爬楼梯

  1. dp[i] 是爬到第 i 阶的最小开销(假设 i == 0 代表第一个阶梯)
  2. dp[i] = min{dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]}
  3. dp[0] = 0, dp[1] = 0
  4. 从前向后遍历

62. 不同路径

  1. dp[i][j] 表示到 (i, j) 的位置有多少种路径(从 (0, 0) 出发)
  2. dp[i][j] = dp[i - 1][j] + dp[i][j - 1]
  3. dp[i][0] = 1, dp[0][j] = 1
  4. 从前向后遍历

63. 不同路径 II

  1. dp[i][j] 表示到 (i, j) 的位置有多少种路径(从 (0, 0) 出发)
  2. dp[i][j] = if (isNotObstacle[i - 1][j]) dp[i - 1][j] + if (isNotObstacle[i][j - 1]) dp[i][j - 1]
  3. 如果 (i, 0) 是障碍物,那么 (0, 0)(i - 1, 0) 都初始化为 1,后面的初始化为 0(0, j) 同理
  4. 从前向后遍历