剑指 Offer 12. 矩阵中的路径
题目:
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。
[["a","b","c","e"],
["s","f","c","s"],
["a","d","e","e"]]
但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入这个格子。
示例 1:
输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED" 输出:true
示例 2:
输入:board = [["a","b"],["c","d"]], word = "abcd" 输出:false
提示:
1 <= board.length <= 200
1 <= board[i].length <= 200
代码:
1 class Solution { 2 3 public static boolean result=false; 4 5 public boolean exist(char[][] board, String word) { 6 7 if(board==null||board.length==0||word.length()==0){return false;} 8 9 int n=board.length; 10 11 int m=board[0].length; 12 13 boolean[][] bool=new boolean[n][m]; 14 15 char first_char=word.charAt(0); 16 17 for(int i=0;i<n;i++){ 18 19 for(int j=0;j<m;j++){ 20 21 if(first_char==board[i][j]){ 22 23 bool[i][j]=true; 24 25 fun0(board,i,j,word,1,bool); 26 27 if(result==true){ 28 29 result=false; //这一步真实情况下可以不用写,这里是因为力扣会一直记录全局变量的值,上一次实例的值会保存在这一次中 30 31 return true; 32 33 } 34 35 bool[i][j]=false; 36 37 } 38 39 } 40 41 } 42 43 return false; 44 45 } 46 47 48 49 public static void fun0(char[][] board,int n,int m,String word,int t,boolean[][] bool){ 50 51 if(result==false){ 52 53 if(word.length()==t){result=true;} 54 55 else{ 56 57 if(n>=1&&bool[n-1][m]==false){ //上边一位未经过 58 59 if(board[n-1][m]==word.charAt(t)){ 60 61 bool[n-1][m]=true; 62 63 fun0(board,n-1,m,word,t+1,bool); 64 65 bool[n-1][m]=false; 66 67 } 68 69 } 70 71 if(n<board.length-1&&bool[n+1][m]==false){ //下边一位未经过 72 73 if(board[n+1][m]==word.charAt(t)){ 74 75 bool[n+1][m]=true; 76 77 fun0(board,n+1,m,word,t+1,bool); 78 79 bool[n+1][m]=false; 80 81 } 82 83 } 84 85 if(m>=1&&bool[n][m-1]==false){ //左边一位未经过 86 87 if(board[n][m-1]==word.charAt(t)){ 88 89 bool[n][m-1]=true; 90 91 fun0(board,n,m-1,word,t+1,bool); 92 93 bool[n][m-1]=false; 94 95 } 96 97 } 98 99 if(m<board[0].length-1&&bool[n][m+1]==false){ //左边一位未经过 100 101 if(board[n][m+1]==word.charAt(t)){ 102 103 bool[n][m+1]=true; 104 105 fun0(board,n,m+1,word,t+1,bool); 106 107 bool[n][m+1]=false; 108 109 } 110 111 } 112 113 } 114 115 } 116 117 } 118 119 }
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术