剑指 Offer 12: 矩阵中的路径

news/2024/10/17 10:25:05/

这道题看着简直是完全没思路,看了下发现是使用回溯的方法。

下面这里要注意,newi是旧的i加上新的偏移值!newj同理,并不是加自己,别昏头!

s是String类型的变量,要写成size()

下面是正确的代码:

class Solution {public boolean exist(char[][] board, String word) {//每一个节点都可能是开始的节点int h = board.length, w = board[0].length;//千万记住不能忘记写boolean类型的数组new出大小,默认值是falseboolean[][] visited = new boolean[h][w];for(int i = 0; i < h; i++){for(int j = 0; j < w; j++){//有多次机会,所以不可以直接返回值,对了或者循环结束了才能返回boolean flag = check(board,word,visited,i , j, 0);if(flag)return true;}}return false;}//传进来的k是已经查对的位数public boolean check(char[][] board,String s, boolean[][] visited,int i, int j,int k){//有两种特殊情况,一种是不等于说明不满足条件if(board[i][j] != s.charAt(k))return false;//另一种是此时也相等并且等于s的长度else if(k == s.length() - 1)return true;//开始回溯的部分,每个节点有上下左右四个方向int [][] directions = {{0, 1}, {1, 0}, {-1, 0}, {0, -1}};visited[i][j] = true;boolean result = false;for(int[] dic : directions){//按照上下左右的方式递增值int newi = dic[0] + i,newj  = dic[1] + j;if(newi>=0&&newi<visited.length&&newj>=0&&newj<visited[0].length&&!visited[newi][newj]){boolean flag = check(board,s,visited,newi,newj,k+1);if(flag){result = true;break;}}}//没找到就复原当前状态,所有节点都复原visited[i][j] = false;return result;}

 

 

 


http://www.ppmy.cn/news/598262.html

相关文章

6.S081——设备中断与驱动部分(串口驱动与Console)——xv6源码完全解析系列(8)

0.briefly speaking 点此返回上一篇博客 上一篇博客中我们简单介绍了UART和PLIC的初始化过程&#xff0c;并迭代式的分析了console的读写操作&#xff0c;这篇博客接着上一篇的话题&#xff0c;研究一下一个字符是怎么一步步被显示到我们的屏幕上的&#xff0c;经过了哪些设备…

mac文件夹 文件重命名快捷键

选中文件&#xff0c;再 回车键&#xff01;&#xff01;&#xff01; 即可重命名

重命名快捷键

第一种是使用按键F2。选中文件&#xff0c;按下F2&#xff0c;文件就会处于重命名状态。 第二种是左键选中文件&#xff0c;在文件处于选中的状态下同样左键点击文件名部分&#xff0c;就可以使文件处于重命名的状态。当然&#xff0c;两次单击的时间间隔不要过短&#xff0c;过…

电脑文件之批量重命名

电脑的【文件资源管理器】可以进行简单的重命名操作。 1、CTRLA全选图片&#xff0c;然后按F2&#xff0c;或者右键菜单【重命名】&#xff0c;就会在第一个文件中出现重命名的窗口。 2、重命名&#xff0c;然后回车。 3、接着文件名字就会以序列的形式有规则的进行命名。 学…

windos下快捷键给文件、文件名重命名

今天&#xff0c;老师给了个小任务&#xff0c;要把老师QQ上收到的一百多个作业把命名格式不对的记录下来。这项任务简单多了&#xff0c;可是&#xff0c;我是一个比较懒的人&#xff0c;让我一个个的把不对的名字输入到文档里&#xff0c;我没这个耐心&#xff0c;故此&#…