剑指 Offer 12. 矩阵中的路径
public boolean exist(char[][] board, String word) { int m = board.length; int n = board[0].length; boolean[][] visited = new boolean[m][n]; int len = word.length(); int k = 0; for(int i = 0;i<m;i++){ for(int j = 0;j<n;j++){ if(board[i][j] == word.charAt(0)){ if(find(i,j,m,n,len,k,board,word,visited)){ return true; } } } } return false; } private boolean find(int i, int j, int m, int n,int len, int k, char[][] board, String word, boolean[][] visited) { //搜索该位置的上(i-1,j)下(i+1,j)左(i,j-1)右(i,j+1),看是否能找到下一个字符 if(i<0 || i>=m || j<0 || j>=n) return false; if(!visited[i][j]){ if(board[i][j] == word.charAt(k)) { if(k == len-1) return true; if(i>0){ visited[i][j] = true; if(find(i - 1, j, m, n, len, k + 1,board,word,visited)){ return true; } visited[i][j] = false; } if(i<m-1){ visited[i][j] = true; if(find(i + 1, j, m, n, len, k + 1,board,word,visited)){ return true; } visited[i][j] = false; } if(j>0){ visited[i][j] = true; if(find(i, j - 1, m, n, len, k + 1,board,word,visited)){ return true; } visited[i][j] = false; } if(j<n-1){ visited[i][j] = true; if(find(i, j + 1, m, n, len, k + 1,board,word,visited)){ return true; } visited[i][j] = false; } } } return false; }
我的前方是万里征途,星辰大海!!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步