题目描述:
给定一个二维网格和一个单词,找出该单词是否存在于网格中。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
示例:
board =
[
[‘A’,‘B’,‘C’,‘E’],
[‘S’,‘F’,‘C’,‘S’],
[‘A’,‘D’,‘E’,‘E’]
]
给定 word = “ABCCED”, 返回 true.
给定 word = “SEE”, 返回 true.
给定 word = “ABCB”, 返回 false.
题目解答:
方法1:回溯算法
在原二维数组中每找到一个单词的起始字符start,就进行回溯算法,判断是否能找到整个单词,尝试起始字符周围四个字符情况,看是否可以向下一个字符遍历。另外需要标记走过的字符,失败的情况也需要恢复字符。
另外可以将四个方向用数字表示,用for循环控制,这样减少代码量。
运行时间4ms,代码如下。
bool myExist(char** board, int m, int n, char* word, int row, int col) {
if(word[0] == NULL)
return true;
if(col - 1 >= 0 && board[row][col - 1] == word[0]) {
board[row][col - 1] = '-';
if(myExist(board

该博客介绍了如何使用C语言解决LeetCode的第79题——单词搜索。文章通过回溯算法来查找二维网格中按顺序相邻的字母组成的单词,例如在给定的示例网格中判断单词'ABCCED'、'SEE'和'ABCB'是否存在。博主提供了详细解题思路和优化技巧,包括用数字表示四个方向以简化代码。
&spm=1001.2101.3001.5002&articleId=85725600&d=1&t=3&u=328325cc21f14d78b2df6c5a32ccbcf3)
1435

被折叠的 条评论
为什么被折叠?



