0
点赞
收藏
分享

微信扫一扫

34. 回溯

M4Y 2022-03-11 阅读 67

代码:

class Solution {
    public boolean exist(char[][] board, String word) {
        char[] ch = word.toCharArray();
        //从每个点出发,找了一遍
        for(int i = 0;i < board.length;i++){
            for(int j = 0;j < board[0].length;j++){
                if(dfs(board,ch,i,j,0)) return true;
            }
        }
        return false;
    }
    //深度优先+回溯
    //board是进行寻找的数组,work是对比的字符串的字节数组,i、j是位置,k是对比过的位数
    boolean dfs(char[][] board, char[] word,int i,int j,int k){

        //包含了角标越界、不相等的情况
        //if(i < 0 || i >= board.length || j < 0 || j > board[0].length || board[i][j] != word[k]) return false;
        if(i >= board.length || i < 0 || j > board[0].length || j < 0  || board[i][j] != word[k]) return false;
        if(k == word.length - 1) return true;//说明对比完了

        //上面终止条件都通过,进入了当前的点
        //先将该点标记为不可访问的点
        board[i][j] = '\0';//可以有其他标记方式;

        //如果没有错误,开始进行下一步四个方向的对比
        boolean res = dfs(board, word,i - 1,j, k + 1) ||
              dfs(board, word,i,j + 1, k + 1) ||
              dfs(board, word,i + 1,j, k + 1) ||
              dfs(board, word,i,j - 1, k + 1);
        
        //回溯
        board[i][j] = word[k];
        return res;
    }
}
举报

相关推荐

0 条评论