剑指 Offer 12. 矩阵中的路径
看到之后觉得
要么是回溯法,要么是深度优先搜索+剪枝
写的回溯法,但是好像没太搞出来
一个是怎么记录这种二维坐标,傻了,一开始还记录的是 int[][]的数组,其实直接记录i j两个参数就行
二是怎么查重,一开始想着用hashset,但是二维的感觉不太好弄,其实可以把已经访问过的地方置空格,访问完后再置回正常值
总体代码如下:
class Solution { public boolean exist(char[][] board, String word) { char[] wordChar=word.toCharArray(); for(int i=0;i<board.length;i++) { for(int j=0;j<board[0].length;j++) { if(dfs(board,wordChar,i,j,0)) {return true;} } } return false; } public boolean dfs(char[][] board,char[] word,int i,int j,int index) { if(index==word.length) {return true;}//到底了 if(i<0||j<0||i>board.length-1||j>board[0].length-1||board[i][j]!=word[index]) {return false;}//超过界限或者不相等 char flag=board[i][j]; board[i][j]=' '; if(dfs(board,word,i+1,j,index+1)||dfs(board,word,i,j+1,index+1)||dfs(board,word,i-1,j,index+1)||dfs(board,word,i,j-1,index+1)) {return true;} board[i][j]=flag; return false; } }
感觉这种深度优先搜索+剪枝的题目还挺多的,有必要练一练
然后这种和回溯法的区别在于什么呢