79. 单词搜索

给定一个二维网格和一个单词,找出该单词是否存在于网格中。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

 

示例:

board =
[
  ['A','B','C','E'],
  ['S','F','C','S'],
  ['A','D','E','E']
]

给定 word = "ABCCED", 返回 true
给定 word = "SEE", 返回 true
给定 word = "ABCB", 返回 false

 

提示:

  • board 和 word 中只包含大写和小写英文字母。
  • 1 <= board.length <= 200
  • 1 <= board[i].length <= 200
  • 1 <= word.length <= 10^3

 

/**
 * @param {character[][]} board
 * @param {string} word
 * @return {boolean}
 */

function DFS(board,row,col,rows,cols,word,cur){
    if(row>=rows||col>=cols||row<0||col<0)return false;
    const item=board[row][col];
    if(item!==word[cur])return false;
    if(cur+1===word.length)return true;

    board[row][col]=null;

    const res=
        DFS(board,row+1,col,rows,cols,word,cur+1)||
        DFS(board,row,col+1,rows,cols,word,cur+1)||
        DFS(board,row-1,col,rows,cols,word,cur+1)||
        DFS(board,row,col-1,rows,cols,word,cur+1);

    board[row][col]=item;

    return res;
}

var exist=function(board,word){
    if(word.length===0)return true;
    if(board.length===0)return false;

    const rows=board.length;
    const cols=board[0].length;

    for(let i=0;i<rows;i++){
        for(let j=0;j<cols;j++){
            const find=DFS(board,i,j,rows,cols,word,0);
            if(find)return true;
        }
    }

    return false;
}

 

posted @ 2021-01-22 23:03  XXXSANS  阅读(88)  评论(0编辑  收藏  举报