mirror of
https://github.com/krahets/hello-algo.git
synced 2025-07-06 22:34:18 +08:00
feat: Revised the book (#978)
* Sync recent changes to the revised Word. * Revised the preface chapter * Revised the introduction chapter * Revised the computation complexity chapter * Revised the chapter data structure * Revised the chapter array and linked list * Revised the chapter stack and queue * Revised the chapter hashing * Revised the chapter tree * Revised the chapter heap * Revised the chapter graph * Revised the chapter searching * Reivised the sorting chapter * Revised the divide and conquer chapter * Revised the chapter backtacking * Revised the DP chapter * Revised the greedy chapter * Revised the appendix chapter * Revised the preface chapter doubly * Revised the figures
This commit is contained in:
@ -22,7 +22,7 @@ def backtrack(choices: list[int], state: int, n: int, res: list[int]) -> int:
|
||||
|
||||
def climbing_stairs_backtrack(n: int) -> int:
|
||||
"""爬楼梯:回溯"""
|
||||
choices = [1, 2] # 可选择向上爬 1 或 2 阶
|
||||
choices = [1, 2] # 可选择向上爬 1 阶或 2 阶
|
||||
state = 0 # 从第 0 阶开始爬
|
||||
res = [0] # 使用 res[0] 记录方案数量
|
||||
backtrack(choices, state, n, res)
|
||||
|
@ -14,7 +14,7 @@ def coin_change_dp(coins: list[int], amt: int) -> int:
|
||||
# 状态转移:首行首列
|
||||
for a in range(1, amt + 1):
|
||||
dp[0][a] = MAX
|
||||
# 状态转移:其余行列
|
||||
# 状态转移:其余行和列
|
||||
for i in range(1, n + 1):
|
||||
for a in range(1, amt + 1):
|
||||
if coins[i - 1] > a:
|
||||
|
@ -62,7 +62,7 @@ def edit_distance_dp(s: str, t: str) -> int:
|
||||
dp[i][0] = i
|
||||
for j in range(1, m + 1):
|
||||
dp[0][j] = j
|
||||
# 状态转移:其余行列
|
||||
# 状态转移:其余行和列
|
||||
for i in range(1, n + 1):
|
||||
for j in range(1, m + 1):
|
||||
if s[i - 1] == t[j - 1]:
|
||||
|
@ -7,10 +7,10 @@ Author: Krahets (krahets@163.com)
|
||||
|
||||
def knapsack_dfs(wgt: list[int], val: list[int], i: int, c: int) -> int:
|
||||
"""0-1 背包:暴力搜索"""
|
||||
# 若已选完所有物品或背包无容量,则返回价值 0
|
||||
# 若已选完所有物品或背包无剩余容量,则返回价值 0
|
||||
if i == 0 or c == 0:
|
||||
return 0
|
||||
# 若超过背包容量,则只能不放入背包
|
||||
# 若超过背包容量,则只能选择不放入背包
|
||||
if wgt[i - 1] > c:
|
||||
return knapsack_dfs(wgt, val, i - 1, c)
|
||||
# 计算不放入和放入物品 i 的最大价值
|
||||
@ -24,13 +24,13 @@ def knapsack_dfs_mem(
|
||||
wgt: list[int], val: list[int], mem: list[list[int]], i: int, c: int
|
||||
) -> int:
|
||||
"""0-1 背包:记忆化搜索"""
|
||||
# 若已选完所有物品或背包无容量,则返回价值 0
|
||||
# 若已选完所有物品或背包无剩余容量,则返回价值 0
|
||||
if i == 0 or c == 0:
|
||||
return 0
|
||||
# 若已有记录,则直接返回
|
||||
if mem[i][c] != -1:
|
||||
return mem[i][c]
|
||||
# 若超过背包容量,则只能不放入背包
|
||||
# 若超过背包容量,则只能选择不放入背包
|
||||
if wgt[i - 1] > c:
|
||||
return knapsack_dfs_mem(wgt, val, mem, i - 1, c)
|
||||
# 计算不放入和放入物品 i 的最大价值
|
||||
|
@ -55,7 +55,7 @@ def min_path_sum_dp(grid: list[list[int]]) -> int:
|
||||
# 状态转移:首列
|
||||
for i in range(1, n):
|
||||
dp[i][0] = dp[i - 1][0] + grid[i][0]
|
||||
# 状态转移:其余行列
|
||||
# 状态转移:其余行和列
|
||||
for i in range(1, n):
|
||||
for j in range(1, m):
|
||||
dp[i][j] = min(dp[i][j - 1], dp[i - 1][j]) + grid[i][j]
|
||||
|
Reference in New Issue
Block a user