leetcode 力扣 79 单词搜索

90 阅读1分钟

回溯

lc79.jpeg

public boolean exist(char[][] board, String word) {
        char[] wordChars = word.toCharArray();
        for (int i = 0; i < board.length; i++) {
            for (int j = 0; j < board[0].length; j++) {
                if (dfs(i, j, 0, board, wordChars)) {
                    return true;
                }
            }
        }

        return false;
    }

    boolean dfs(int row, int column, int idx, char[][] board, char[] wordChars) {
        if (row < 0 || row >= board.length || column < 0 || column >= board[0].length
                || board[row][column] != wordChars[idx]) {
            return false;
        }

        if (idx == wordChars.length - 1) {
            return true;
        }

        board[row][column] = '\0';

        boolean res = dfs(row, column + 1, idx + 1, board, wordChars)
                || dfs(row + 1, column, idx + 1, board, wordChars)
                || dfs(row, column - 1, idx + 1, board, wordChars)
                || dfs(row - 1, column, idx + 1, board, wordChars);

        board[row][column] = wordChars[idx];
        return res;
    }