字母迷宫
字母迷宫(单词搜索)
思路
刚开始看到这题,知道用回溯算法,所以回忆了回溯算法三部曲
- 1、确定参数
- 2、确定终止条件
- 3、单层搜索逻辑
但是看了半天之确定了参数,终止条件和单层逻辑都理出来。看了讲解知道了原因。
第一个字母的匹配逻辑和后续字母匹配逻辑不一致。
第一个字母就在矩阵中挨个遍历,哪个元素等于target[0],就可以开始下一个字母。
而非第一个字的匹配,是要在第一个匹配上的字母的上下左右寻找。
前者按照行列遍历,后者按照方向遍历。因此有必要分成两部分,先找到第一个字母吗,然后后续字母遵照一样的逻辑处理。
思路详解
- 1、参数:i,j,k分别表示矩阵的行、矩阵的列以及当前遍历到target字符的哪一位字符
- 2、确定终止条件
- 如果当前位置的字符不等于 target[k],则当前路径不可能构成目标单词,返回 false。
- 如果 k == target.length - 1 且当前字符匹配,说明已经成功找到目标单词,返回 true。
- 注意,还应该有一个终止条件是检查 (i, j) 是否越界或者该位置已经被访问过,以避免重复访问。
- 3、单层搜索逻辑:
- 对于矩阵中的每一个元素,如果它是 target[0],则从这个元素开始,尝试所有可能的搜索路径。
- 一旦找到匹配的第一个字母,后续的搜索应该限制在当前元素的上下左右四个方向上。
- 搜索过程中,需要标记当前路径已访问过的位置,以避免循环访问。搜索后,需要撤销标记(回溯),以便其他搜索路径可以使用这些位置。
代码
1 | var wordPuzzle = function(grid, target) { |
copilot 代码
1 | var wordPuzzle = function(grid, target) { |