题目描述
给定一个m x n二维字符网格board和一个字符串单词word。如果word存在于网格中,返回true;否则,返回false。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
题解思路:
class Solution { public boolean exist(char[][] board, String word) { char[] words = word.toCharArray(); for(int i = 0; i < board.length;i++){ for(int j = 0; j < board[0].length;j++){ if(dfs(board,words,i,j,0)) return true; } } return false; } boolean dfs(char[][] board,char[] word,int i,int j,int k){ if(i >= board.length || i < 0 || j >= board[0].length || j < 0 || board[i][j] != word[k]){ return false; } if(k == word.length - 1) return true; board[i][j] = '\0'; boolean res = dfs(board,word,i+1,j,k+1) || dfs(board,word,i-1,j,k+1) || dfs(board,word,i,j-1,k+1) || dfs(board,word,i,j+1,k+1); board[i][j] = word[k]; return res; } }思路类似计算岛屿数量,同时要进行回溯。