79. Word Search
一、题目
1、审题
2、 分析
给出一个二维的字符数组 board,一个字符串 word;在 board 中可以向左右、上下延伸,判断 word 是否可以在延伸中找到。其中 board 中每个字符只能用一次。
二、解答
1、思路:
运用递归的思想进行实现。
开辟一个二维数组的空间用于记录该字符是否被使用。
class Solution { public boolean exist(char[][] board, String word) { if(board == null) return false; int rows = board.length, cols = board[0].length; if(rows == 0 || cols == 0 || rows*cols < word.length()) return false; boolean[][] isUsed = new boolean[rows][cols]; for (int row = 0; row < rows; row++) { for (int col = 0; col < cols; col++) { if(exist(board, row, col, word.toCharArray(), isUsed, 0)) return true; } } return false; } private boolean exist(char[][] board, int row, int col, char[] charArray, boolean[][] isUsed, int index) { if(index == charArray.length) return true; if(row < 0 || col < 0 || row == board.length || col == board[0].length) return false; if(isUsed[row][col] || board[row][col] != charArray[index]) return false; isUsed[row][col] = true; boolean isExist = exist(board, row, col+1, charArray, isUsed, index+1) || exist(board, row, col-1, charArray, isUsed, index+1) || exist(board, row+1, col, charArray, isUsed, index+1) || exist(board, row-1, col, charArray, isUsed, index+1); isUsed[row][col] = false; return isExist; } }