每格 作为一个起点 用DFS搜索, 就是用DFS 上下左右 走个遍... 看看每格的字母 是不是 跟string.charAt(index)一样凡是出界,已经走过,不相等 直接return false
代码很直观
public class Solution { String word; char[][] board; boolean checked[][]; public boolean exist(char[][] board, String word) { checked = new boolean[board.length][board[0].length]; this.word = word; this.board = board; for (int i = 0; i < board.length; i++){ for (int j = 0; j < board[0].length; j++){ if (recursiveSol(i,j,0)){ return true; } } } return false; } boolean recursiveSol(int row, int column, int index){ if (row >= board.length || column >= board[0].length || row < 0 || column < 0 || word.charAt(index) != board[row][column] || checked[row][column]){ return false; } if (word.charAt(index) == board[row][column] && index == word.length()-1){ return true; } checked[row][column] = true; boolean result = false; if (recursiveSol(row+1, column, index+1) || recursiveSol(row-1, column, index+1) || recursiveSol(row, column+1, index+1) || recursiveSol(row, column-1, index+1)){ return true; } checked[row][column] = false; return false; } }
No comments:
Post a Comment