标签:25 word int 单元格 dfs 单词 boolean board 2022
剑指 Offer 12. 矩阵中的路径
给定一个 m x n
二维字符网格 board
和一个字符串单词 word
。如果 word
存在于网格中,返回 true
;否则,返回 false
。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
例如,在下面的 3×4 的矩阵中包含单词 "ABCCED"(单词中的字母已标出)。
1 class Solution { 2 int[][] dir={{1,0},{-1,0},{0,1},{0,-1}}; 3 public boolean exist(char[][] board, String word) { 4 int m=board.length,n=board[0].length; 5 boolean[][] visited=new boolean[m][n]; 6 for (int i=0;i<m;i++){ 7 for (int j=0;j<n;j++){ 8 visited[i][j]=true; 9 if (dfs(board,i,j,0,word,visited)) return true; 10 visited[i][j]=false; 11 } 12 } 13 return false; 14 } 15 16 public boolean dfs(char[][] board,int x,int y,int index,String word,boolean[][] visited){ 17 int m=board.length,n=board[0].length; 18 if (board[x][y]!=word.charAt(index)) return false; 19 if (index==word.length()-1) return true; 20 boolean flag=false; 21 for (int i=0;i<dir.length;i++){ 22 int dx=x+dir[i][0]; 23 int dy=y+dir[i][1]; 24 if (dx>=0&&dx<m&&dy>=0&&dy<n&&!visited[dx][dy]&&board[dx][dy]==word.charAt(index+1)){ 25 visited[dx][dy]=true; 26 flag=flag||dfs(board,dx,dy,index+1,word,visited); 27 visited[dx][dy]=false; 28 } 29 } 30 return flag; 31 } 32 }
思路:对于每个节点dfs判断是否可以找到单词。
标签:25,word,int,单元格,dfs,单词,boolean,board,2022 来源: https://www.cnblogs.com/benbicao/p/16410911.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。