问题:
给定一个 m x n
二维字符网格 board
和一个字符串单词 word
。如果 word
存在于网格中,返回 true
;否则,返回 false
。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
思想:
深度优先算法加回溯算法完成
代码:
class Solution {public boolean exist(char[][] board, String word) {if(board.length < 1){return false;}int n = board.length;int m = board[0].length;for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){if(dfs(board,word,0,i,j)){return true;}}}return false;}public boolean dfs(char[][] board,String word,int index,int x,int y){if(x>=board.length || x < 0||y >=board[0].length||y<0||board[x][y]=='#'||board[x][y] != word.charAt(index)){return false;}if(index == word.length() - 1){return true;}else{char temp = board[x][y];board[x][y] = '#';boolean flag = dfs(board,word,index+1,x+1,y)||dfs(board,word,index+1,x-1,y) || dfs(board,word,index+1,x,y-1) || dfs(board,word,index+1,x,y+1);board[x][y] = temp;return flag;}} }