LeetCodehot 力扣热题100 组合总和

题目分析

题目:

给定一个 m x n 的二维字符网格 board 和一个字符串 word,判断 word 是否存在于网格中。

• word 可以从网格中的任意位置开始。

• 每次只能向 上下左右 四个方向移动。

• 不能重复使用同一个格子。

解题思路

我们使用 深度优先搜索(DFS)+ 回溯 进行搜索:

  1. 遍历整个board,找到 word0 的起始位置。

  2. 从起始位置进行 DFS 递归搜索:

• 当前位置是否越界?

• 当前位置字符是否匹配 wordn?

• n == word.size() - 1 时,找到完整 word,返回 true。

  1. 回溯:

• 访问过的格子标记为 #,防止重复访问。

• 递归搜索四个方向(上下左右)。

• 递归结束后,恢复原来的字符。

代码实现

详细运行步骤

示例输入

vector<vector<char>> board = {

{'A', 'B', 'C', 'E'},

{'S', 'F', 'C', 'S'},

{'A', 'D', 'E', 'E'}

};

string word = "ABCCED";

Solution sol;

cout << sol.exist(board, word); // 输出:true

回溯过程分析

1. exist() 方法遍历整个 board

for (int i = 0; i < rows; i++) {

for (int j = 0; j < cols; j++) {

if (boardij == word0 && dfs(board, word, i, j, 0)) {

return true;

}

}

}

遍历过程中,找到 word0 = 'A' 的位置 (0,0),开始 DFS。

2. dfs() 递归过程

递归深度 i, j wordn 递归方向 说明

1 (0,0) 'A' → (0,1) 匹配,向右搜索

2 (0,1) 'B' → (0,2) 匹配,向右搜索

3 (0,2) 'C' ↓ (1,2) 匹配,向下搜索

4 (1,2) 'C' ↓ (2,2) 匹配,向下搜索

5 (2,2) 'E' ← (2,1) 匹配,向左搜索

6 (2,1) 'D' ✅ 找到完整 word**,返回**true

回溯树示意图

A(0,0)

↓

B(0,1)

↓

C(0,2)

↓

C(1,2)

↓

E(2,2)

←

D(2,1) ✅

关键优化点

✅ 避免重复访问:使用 boardij = '#' 标记已访问,递归结束后恢复字符。

✅ 剪枝优化:遇到 boardij != wordn 直接返回 false,避免不必要的递归。

✅ 找到 word立即返回:减少不必要的遍历。

时间复杂度分析

• 最坏情况:遍历整个 board,每个字符最多进行 4 次递归,时间复杂度 O(m * n * 4^L),其中 m, n 为网格大小,L 为 word 长度。

• 最优情况:找到 word 立即返回,减少不必要的递归。

总结

  1. 遍历 board**,找到** word0作为起点

  2. 使用 DFS 递归搜索

• 越界检查

• 匹配检查

• 标记访问

• 递归四个方向

• 回溯

  1. 找到 word立即返回true

  2. 所有路径遍历完仍未找到,返回false

相关推荐
小静AI工程实验室几秒前
RSA 算法详解:从模幂原理到 OAEP 加密、PSS 签名与 Python 实验
python·算法
xzal127 分钟前
GESP Python笔记
笔记·python·算法
wzdark9 分钟前
算法中的记忆化思想与重复子问题优化4
算法
Discipline102934 分钟前
流水线运行是否正随时间变得更加集中?
算法
lzhdim1 小时前
C#不为人知的10个魔法特性:资深开发者也会震惊的底层奥秘
java·前端·javascript·算法·c#
weixin_307779131 小时前
C++代码实现MATLAB中的pade函数功能
开发语言·c++·算法·matlab
smj2302_796826521 小时前
解决leetcode第4064题至多一次取反能被k整除的最长子数组II
python·算法·leetcode
AIGC小尼1 小时前
ACE-Step-1.5 本地 AI 音乐模型实战|text2music 歌词转人声,部署脚本、参数调优与排坑全记录
人工智能·算法·comfyui·ai漫剧
YOLO数据集集合1 小时前
树木检测数据集 | 树木检测 树种分类 航拍林业 森林监测9131期
人工智能·算法·机器学习·分类·数据挖掘·林业·树种分类
青山木1 小时前
Hot 100 --- 下一个排列
java·数据结构·算法·leetcode