2021-03-09单词搜索

2021-03-09单词搜索
2021-03-09单词搜索

class Solution {
    public boolean exist(char[][] board, String word) {
        int row = board.length;            //获取行数;
        int col = board[0].length;         //获取列数;

        int[][] used = new int[row][col];

        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                if (board[i][j]==word.charAt(0)) {
                    used[i][j]=1;
                    if (bfs(board, row, col, i, j, 1,word,used))
                        return true;
                    used[i][j]=0;
                }
            }
        }
        return false;
    }

    private static boolean bfs(char[][] board,int row,int col,int i ,int j,int index,String word,int[][] used){
        if (index==word.length()){
            return true;

        }

        //向左走一步
        if (0<=i && i<row && 1<=j && j<col && board[i][j-1]==word.charAt(index) && used[i][j-1]!=1){
            used[i][j-1]=1;
            if (bfs(board, row, col, i, j-1, index+1, word,used))
                return true;
            used[i][j-1]=0;
        }

        //向右走一步
        if (0<=i && i<row && 0<=j && j<col-1 && board[i][j+1]==word.charAt(index) && used[i][j+1]!=1){

            used[i][j+1]=1;
            if (bfs(board, row, col, i, j + 1, index + 1,word,used))
                return true;
            used[i][j+1]=0;
        }

        //向上走一步
        if (1<=i && i<row && 0<=j && j<col && board[i-1][j]==word.charAt(index) && used[i-1][j]!=1) {
           
            used[i-1][j]=1;
            if (bfs(board, row, col, i - 1, j, index + 1, word,used))
                return true;
            used[i-1][j]=0;
        }

        //向下走一步
        if (0<=i && i<row-1 && 0<=j && j<col && board[i+1][j]==word.charAt(index) && used[i+1][j]!=1) {
         
            used[i+1][j]=1;
            if (bfs(board, row, col, i + 1, j, index + 1,word,used))
                return true;
            used[i+1][j]=0;
        }

        return false;
    }
}


错误代码,还没找到错误原因
class Solution {
    public boolean exist(char[][] board, String word) {
        int rows = board.length;
        int cols = board[0].length;
        boolean[][] visited = new boolean[rows][cols];


        for(int i=0; i<rows; i++){
            for(int j=0; j<cols; j++){
                visited[i][j] = true;
                if(board[i][j]==word.charAt(0)){
                    next(board,word,1,i,j,visited);
                }
                visited[i][j] = false;
            }
        }
        return false;
    }

    public boolean next(char[][] board, String word, int index, int i, int j, boolean[][] visited){
        if(index==word.length()){
            return true;
        }
        int rows = board.length;
        int cols = board[0].length;
        if(0<=j && j<cols&&i>=0&&i+1<rows&&board[i+1][j]==word.charAt(index)&&!visited[i+1][j]){
            visited[i+1][j] = true;
            if(next(board, word, index+1, i+1, j, visited)){
                return true;
            }
            visited[i+1][j] = false;
        }
        if(0<=j && j<cols&&i-1>=0&&i<rows&&board[i-1][j]==word.charAt(index)&&!visited[i-1][j]){
            visited[i-1][j] = true;
            next(board, word, index+1, i-1, j, visited);
            visited[i-1][j] = false;
        }
        if(j>=0&&j+1<cols&&0<=i && i<rows&&board[i][j+1]==word.charAt(index)&&!visited[i][j+1]){
            visited[i][j+1] = true;
            if(next(board, word, index+1, i, j+1, visited)){
                return true;
            }
            visited[i][j+1] = false;
        }
        if(j-1>=0&&j<cols&&0<=i && i<rows&&board[i][j-1]==word.charAt(index)&&!visited[i][j-1]){
            visited[i][j-1] = true;
            if(next(board, word, index+1, i, j-1, visited)){
                return true;
            }
            visited[i][j-1] = true;
        }
        return false;
    }
}
上一篇:4树 二叉树 二叉搜索树 堆


下一篇:LeetCode-778. 水位上升的泳池中游泳