题目:
/**
* @param {character[][]} board
* @param {string} word
* @return {boolean}
*/
var exist = function (board, word) {
const m = board.length;
const n = board[0].length;
let step = 1;
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
if (findPoint(i, j, board, word, step)) return true
}
}
return false
};
function findPoint(i, j, board, word, step) {
if (i < 0 || i > board.length - 1 || j < 0 || j > board[0].length - 1 || board[i][j] !== word[step - 1]) return
if (step >= word.length) return true
const orgin = board[i][j];
// 这里只是为了标记走过的位置
board[i][j] = step;
step++;
const pointList=[[0,-1],[-1,0],[0,1],[1,0]]
const flag= pointList.some(([addX,addY])=>{
if(findPoint(i+addX,j+addY,board, word, step)){
return true
}
})
if(flag) return true
board[i][j] = orgin;
}
整体思路:遍历整个二维数组,匹配单词首字符,步长加1,则开始递归上下左右节点,直到步长等于单词字母长度即找到该单词。 递归回溯的点:边界值,边界值是否等于当前回溯哦单词的值(board[i][j] !== word[step - 1])