题目描述:
给定一个二维网格和一个单词,找出该单词是否存在于网格中。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
示例:
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(