问题
例子
思路
不知道哪个第一个符合的字符,即不知道从哪开始,所以:两个for循环
深度优先+回溯【因为要找到路径】
直接在二维数组中修改,标记已访问,节省used空间
-
方法1
$$$$
-
方法2
$$$$
代码
//方法1
class Solution {
public boolean exist(char[][] board, String word) {
for(int i=0; i<board.length; i++) {
for(int j=0; j<board[0].length; j++){
if(dfs(i,j,board,word,0)) return true;
}
}
return false;
}
public boolean dfs(int i, int j, char[][] board, String word, int index) {
if(index==word.length()) return true;
if(i<0 || i>=board.length || j<0 || j>=board[0].length || board[i][j]!=word.charAt(index))
return false;
char c = board[i][j];
board[i][j]='/';
index++;
boolean b = dfs(i-1,j,board,word,index)
|| dfs(i+1,j,board,word,index)
|| dfs(i,j-1,board,word,index)
|| dfs(i,j+1,board,word,index);
board[i][j]=c;
index--;
return b;
}
}
//方法2