79

 

 

Code:

public boolean exist(char[][] board, String word) {
    char[] wanted = word.toCharArray();
    boolean[][] visited = new boolean[board.length][board[0].length];
    for (int i = 0; i < board.length; i++) {
        for (int j = 0; j < board[0].length; j++) {
            if (search(board, wanted, 0, i, j, visited)) return true;
        }
    }
    return false;
}
//                          字典          ???                      检查的位置         是否被访问过
private boolean search(char[][] board, char[] wanted, int index, int i, int j, boolean[][] visited){
    if(index == wanted.length) return true;

    int m = board.length, n = board[0].length;
    // 若超出边界 或被访问过 或不符合, 返回false
    if (i < 0 || j < 0 || i >= m || j >= n || visited[i][j] || board[i][j] != wanted[index]) return false;

    // 若以上均否,则该元素满足条件,将其设置为访问过,继续寻找下一个元素
    visited[i][j] = true;

    // 在这一元素的上下左右继续寻找
    boolean res = search(board, wanted, index + 1, i - 1, j, visited) ||
            search(board, wanted, index + 1, i + 1, j, visited) ||
            search(board, wanted, index + 1, i, j-1, visited) ||
            search(board, wanted, index + 1, i, j+1, visited);

    // 将已访问过的元素的visited拨回0
    visited[i][j] = false;
    return res;
}

  

 

posted @ 2019-04-14 20:34  Doris7  阅读(236)  评论(0编辑  收藏  举报