1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| class Solution { public boolean exist(char[][] board, String word) { if(board == null || board.length == 0 || board[0].length == 0) return false; final int m = board.length; final int n = board[0].length; boolean[][] isTraversed = new boolean[m][n]; for(int i = 0; i < m; ++i) { for(int j = 0; j < n; ++j) { if(exists(board, i, j, word, 0, isTraversed)) return true; } } return false; } private boolean exists(char[][] board, int i, int j, String word, int stringIndex, boolean[][] isTraversed) { if(stringIndex == word.length()) return true; if(!isValid(board, i, j) || board[i][j] != word.charAt(stringIndex) || isTraversed[i][j]) { return false; } isTraversed[i][j] = true; boolean ans = exists(board, i+1, j, word, stringIndex+1, isTraversed) || exists(board, i-1, j, word, stringIndex+1, isTraversed) || exists(board, i, j+1, word, stringIndex+1, isTraversed) || exists(board, i, j-1, word, stringIndex+1, isTraversed); isTraversed[i][j] = false; return ans;
} private boolean isValid(char[][] board, int i, int j) { return i >= 0 && i < board.length && j >= 0 && j < board[i].length; } }
|