79. 单词搜索

79. 单词搜索_第1张图片

 为什么记录这道题,虽然不难,但是需要注意几点:

  1. 设置标志位sign,防止重复取元素
  2. sign别忘了清空和重置
class Solution{


    private boolean dfs(int index, String word, String str, int i, int j, char[][] board, boolean sign[][]){


        // 唯一一个返回true的,只要它返回true,那就会直接返回了,不会再遍历
        if(str.equals(word)){
            return true;
        }

        // 其实这个不会执行
//        if(str.length() > word.length()){
//            return false;
//        }

        // 遍历边界
        if(i >= board.length || j >= board[0].length || i < 0 || j < 0){
            return false;
        }

        // 曾经访问过
        if(sign[i][j]){
            return false;
        }


        // 如果元素相同
        if(board[i][j] == word.charAt(index)){
            // 设置标识位
            sign[i][j] = true;
            str += board[i][j];
            index += 1;

            boolean res = dfs(index, word, str, i+1, j, board, sign);
            if(res){
                return true;
            }
            boolean res1 = dfs(index, word, str, i, j+1, board, sign);
            if(res1){
                return true;
            }
            boolean res3 = dfs(index, word, str, i-1, j, board, sign);
            if(res3){
                return true;
            }
            boolean res2 = dfs(index, word, str, i, j-1, board, sign);
            if(res2){
                return true;
            }

            // 把标志位设置回来
            sign[i][j] = false;

        }else {
            return false;
        }

        return false;
    }

    public boolean exist(char[][] board, String word) {

        boolean sign[][] = new boolean[board.length][board[0].length];

        // 递归
        for(int i=0; i

79. 单词搜索_第2张图片

你可能感兴趣的:(leetecode,79.,单词搜索)