1. 程式人生 > 其它 >HTML視窗的前進和後退

HTML視窗的前進和後退

技術標籤:LeetCode--medium

給定一個二維網格和一個單詞,找出該單詞是否存在於網格中。

單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中“相鄰”單元格是那些水平相鄰或垂直相鄰的單元格。同一個單元格內的字母不允許被重複使用。

示例:

board =
[
  ['A','B','C','E'],
  ['S','F','C','S'],
  ['A','D','E','E']
]

給定 word = "ABCCED", 返回 true
給定 word = "SEE", 返回 true
給定 word = "ABCB", 返回 false

提示:

  • boardword中只包含大寫和小寫英文字母。
  • 1 <= board.length <= 200
  • 1 <= board[i].length <= 200
  • 1 <= word.length <= 10^3

程式碼實現:

class Solution {
    public boolean exist(char[][] board, String word) {
        int row = board.length;
        int column = board[0].length;
        boolean[][] visited = new boolean[row][column];
        for (int i = 0; i < row; i++) {
            Arrays.fill(visited[i], false);
        }
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < column; j++) {
                if (digui(board, word, visited, i, j, 0)) {
                    return true;
                }
            }
        }
        
        return false;
    }

    public boolean digui(char[][] board, String word, boolean[][] visited, int row, int column, int index) {
        if (row < 0 || row >= board.length || column < 0 || column >= board[0].length || visited[row][column]) {
            return false;
        }
        if(board[row][column] == word.charAt(index)) {
            visited[row][column] = true;
            if(index == word.length() - 1) {
                return true;
            } else {
                index++;
            }
        } else {
            return false;
        }

        boolean result = digui(board, word, visited, row  + 1, column, index) ||
                digui(board, word, visited, row - 1, column, index)||
                digui(board, word, visited, row, column + 1, index)||
                digui(board, word, visited, row, column - 1, index);
        visited[row][column] = false;
        return result;
    }
}