/**
* @param {character[][]} board
* @param {string} word
* @return {boolean}
*/
var exist = function(board, word) {
var r = board.length;
if(r===0){
return false;
}
var c = board[0].length;
if(c===0){
return false;
}
if(r*c<word.length){
return false;
}
for(var i=0;i<r;i++){
for(var j=0;j<c;j++){
if(findword(i,j,word)){
return true;
}
}
}
return false;
function findword(row,col,str,pos_str){
var str_len = str.length;
if(str_len === 0){
return true;
}
if(row>=r||col>=c||row<0||col<0){
return false;
}
if(board[row][col] !== str.charAt(0)){
return false;
}
var new_str = str.substring(1);
var tmp = board[row][col];
board[row][col] = "0";
var ans = findword(row+1,col,new_str)||findword(row,col+1,new_str)||findword(row-1,col,new_str)||findword(row,col-1,new_str);
board[row][col] = tmp;
return ans;
}
};
这道题的思路是深度优先搜索DFS(结合了递归)。
需要注意的是,由于数组的参数传递是地址传递,所以必须有
board[row][col] = tmp;
这一行代码,以保证将数组做过修改的地方改回去。