深度优先检索:单词搜索
问题:
给定一个 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; } } }
浙公网安备 33010602011771号