[leetcode]79. Word Search -- JavaScript 代码

/**
 * @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;
这一行代码,以保证将数组做过修改的地方改回去。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值