【LeetCode笔记】79. 单词搜索 剑指 Offer 12 矩阵中的路径(Java、dfs)

文章目录

  • 题目描述
  • 思路 & 代码
      • 更新版 2.0

题目描述

  • 一眼dfs,走四个方向即可
    在这里插入图片描述

思路 & 代码

class Solution {boolean[][] visited;boolean found;public boolean exist(char[][] board, String word) {char[] wordArr = word.toCharArray();int m = board.length;int n = board[0].length;visited = new boolean[m][n];// 找到入口,就进行查找for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){if(wordArr[0] == board[i][j]){visited[i][j] = true;found = find(board, wordArr, i, j, 1);if(found){return found;}visited[i][j] = false;}}}return false;}boolean find(char[][] board, char[] word, int x, int y, int index){if(index == word.length){return true;}// 找四个方向if(x + 1 < board.length && !visited[x + 1][y] && word[index] == board[x + 1][y]){visited[x + 1][y] = true;found = find(board, word, x + 1, y, index + 1);if(found){return found;}visited[x + 1][y] = false;}if(x - 1 >= 0 && !visited[x - 1][y] && word[index] == board[x - 1][y]){visited[x - 1][y] = true;found = find(board, word, x - 1, y, index + 1);if(found){return found;}visited[x - 1][y] = false;}if(y + 1 < board[0].length && !visited[x][y + 1] && word[index] == board[x][y + 1]){visited[x][y + 1] = true;found = find(board, word, x, y + 1, index + 1);if(found){return found;}visited[x][y + 1] = false;}if(y - 1 >= 0 && !visited[x][y - 1] && word[index] == board[x][y - 1]){visited[x][y - 1] = true;found = find(board, word, x, y - 1, index + 1);if(found){return found;}visited[x][y - 1] = false;}return found;}
}

更新版 2.0

  • 卧槽。。之前这么长的代码我怎么受得了T T
class Solution {boolean[][] visited;public boolean exist(char[][] board, String word) {char[] arr = word.toCharArray();visited = new boolean[board.length][board[0].length];for(int i = 0; i < board.length; i++) {for(int j = 0; j < board[0].length; j++) {if(dfs(board, arr, 0, i, j)) {return true;}}}return false;}// 符合当前字符,则进入下一层public boolean dfs(char[][] board, char[] arr, int index, int i, int j) {if(index == arr.length) {return true;}// 越界、不符、已访问if(i == board.length || j == board[0].length || i == -1 || j == -1 ||arr[index] != board[i][j] || visited[i][j]) {return false;}visited[i][j] = true;// 短路运算符||:剪枝boolean res = dfs(board, arr, index + 1, i + 1, j) || dfs(board, arr, index + 1, i - 1, j) ||dfs(board, arr, index + 1, i, j + 1) || dfs(board, arr, index + 1, i, j - 1);visited[i][j] = false;return res;}
}
  • 无注释纯净版
class Solution {boolean[][] visited;public boolean exist(char[][] board, String word) {char[] arr = word.toCharArray();visited = new boolean[board.length][board[0].length];for(int i = 0; i < board.length; i++) {for(int j = 0; j < board[0].length; j++) {if(dfs(board, arr, 0, i, j)) {return true;}}}return false;}public boolean dfs(char[][] board, char[] arr, int index, int i, int j) {if(index == arr.length) {return true;}if(i == board.length || j == board[0].length || i == -1 || j == -1 ||arr[index] != board[i][j] || visited[i][j]) {return false;}visited[i][j] = true;boolean res = dfs(board, arr, index + 1, i + 1, j) || dfs(board, arr, index + 1, i - 1, j) ||dfs(board, arr, index + 1, i, j + 1) || dfs(board, arr, index + 1, i, j - 1);visited[i][j] = false;return res;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/504573.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php保存复制粘贴的网页内容,JS实现网站内容的禁止复制和粘贴、另存为

JS实现网站内容的禁止复制和粘贴、另存为google搜索“document.οncοntextmenutrue;document.onselectstarttrue”会有更多详细文章使右键和复制失效使菜单"文件"&#xff0d;"另存为"失效”使右键和复制失效方法一在网页中加入以下代码&#xff1a;docum…

【LeetCode笔记】94 144 145. 二叉树的前序、中序、后序遍历的迭代与递归(Java、dfs、迭代)

文章目录一. 题目描述二. 代码 & 思路1. 递归的写法2. 迭代的写法&#xff08;本文重点来了&#xff09;1) 前序2) 中序3) 后序直接来个整合吧&#xff0c;也方便看。之前只写了递归的&#xff0c;现在补上迭代的&#xff08;迭代才是考点&#xff01;&#xff09; 是面试高…

【LeetCode笔记】96. 不同的二叉搜索树(Java、动态规划)

文章目录题目描述代码 & 思路精简版 2.0题目描述 这道题其实不用构造数据结构二叉搜索树&#xff1a;只要利用这个结构的性质即可&#xff0c;即&#xff1a;左右两子&#xff0c;左小右大然后用动态规划来做&#xff0c;具体如何推导见思路部分 代码 & 思路 见注释…

oracle18c创建数据库,Oracle 18C 手工创建CDB

Oracle 18c For Exadata版本的介质已经发布&#xff0c;作为一名心急的老粉丝&#xff0c;欣喜的发现可以安装在普通的Linux平台。但是在通过DBCA建库的时候会报ORA-12754错误&#xff0c;不过这也难不倒万能的网络。图形界面不行&#xff0c;我们还可以手工建库&#xff0c;前…

【LeetCode笔记】98. 验证二叉搜索树(Java、dfs、中序遍历、二叉树)

文章目录题目描述代码 & 思路题目描述 二叉搜索树&#xff0c;应该满足中序遍历的结果是按顺序的。 比如例1是1&#xff0c;2&#xff0c;3&#xff1b;而例二是1&#xff0c;5&#xff0c;3&#xff0c;4&#xff0c;6&#xff0c;是错的 代码 & 思路 就是中序遍历…

【LeetCode笔记】101. 对称二叉树(Java、回溯)

文章目录题目描述代码 & 思路题目描述 回溯&#xff0c;由最小子树的镜像&#xff0c;得到次小子树的镜像判断&#xff0c;一直回溯到根结点即可 代码 & 思路 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left…

oracle数据库全数据库名,Oracle数据库中的 数据库域名、数据库名、全局数据库名、SID、数据库实例名、服务名 解释...

菜鸟雷区在配置listener.ora 和 tnsnames.ora 连接Oracle数据库服务器时&#xff0c;我们需要把 以下容易混淆的概念区分开来数据库域名数据库名全局数据库名SID数据库实例名服务名有图有真相安装Oracle数据库时我们指定的这些东西在配置时需要使用&#xff0c;真坑&#xff0c…

【LeetCode笔记】102. 二叉树的层序遍历(Java、队列、DFS)

文章目录题目描述代码 & 思路题目描述 按层次&#xff0c;那么先按序读完本层值&#xff0c;并且存入队列中&#xff0c;再根据队列走下一层的值即可 代码 & 思路 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode …

【LeetCode笔记】104. 二叉树的最大深度(Java、DFS、二叉树)

文章目录题目描述代码 & 思路题目描述 全局变量ans&#xff0c;遍历一遍树更新ans即可带着 depth 跑 DFS 代码 & 思路 写成dfs了&#xff0c;确实是bfs /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* …

php 递归格式化数组,利用php递归实现无限分类 格式化数组的详解

我们要做一个商品的无限分类首先数据库字段为&#xff1a;id ----------商品主键idfid ---------- 商品父idname ---------- 商品名最后输出的数组格式为. 代码如下:array(0>array(id>1,fid>0,name>法国货child>array(0>array(id>12,fid>1,name>香水…

oracle百分之0.01就成了.01,遭遇ORA-01200错误的原因及解决方法

1、案例现象在数据库startup时&#xff0c;报错&#xff1a;[oraclelocalhost ~]$ sqlplus "/as sysdba"SQL*Plus: Release 10.2.0.1.0 - Production on Mon Sep 19 19:31:05 2011Copyright (c) 1982, 2005, Oracle. All rights reserved.Connected to an idle inst…

【LeetCode笔记】121. 买卖股票的最佳时机 / 剑指 Offer 63. 股票的最大利润(Java、动态规划)

文章目录题目描述代码 & 思路初版代码更新啦&#xff5e;优化代码再次更新题目描述 讲道理&#xff0c;一眼dp 代码 & 思路 时间复杂度O(n)&#xff0c;不过可改进的地方还多&#xff0c;跑出来大概6ms。 初版代码 class Solution {public int maxProfit(int[] p…

【LeetCode笔记】25. K个一组翻转链表(Java、链表、递归)

文章目录题目描述思路 & 代码更新 - 精简版三刷 - 再更新版题目描述 审题很重要。。一开始以为是一组换两个&#xff0c;但是实际上是一组全部都要互换。字节超高频题&#xff01;要认真点记录 思路 & 代码 用回溯来做&#xff0c;可以分解成&#xff1a;每次都用h…

php request time,php中time()与$_SERVER[REQUEST_TIME]用法区别分析

php中time()与$_SERVER[REQUEST_TIME]用法区别分析发布于 2015-01-26 08:56:46 | 143 次阅读 | 评论: 0 | 来源: 网友投递PHP开源脚本语言PHP(外文名: Hypertext Preprocessor&#xff0c;中文名&#xff1a;“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java…

【LeetCode笔记】105. 从前序与中序遍历序列构造二叉树(Java、递归、二叉树、哈希表)

文章目录题目描述代码 & 思路题目描述 这题主要是考察前序、后序的性质&#xff0c;以及相互间的关系 代码 & 思路 前序&#xff1a;根 - 左 - 右&#xff1b; 中序&#xff1a;左 - 根 - 右&#xff0c;那么用前序数组的首位&#xff08;即根&#xff09;的值到中…

Linux c 进程名 pid,Linux C已知进程名字得到其PID号

最近需要实现一个功能&#xff0c;即在一个Linux C程序中&#xff0c;已知其他进程的名字&#xff0c;需要获得该进程的PID&#xff0c;经过一番上网搜索&#xff0c;找到两种可行的方法&#xff1a;1.通过popen创建一个管道&#xff0c;执行shell命令并得到返回结果2.通过搜索…

【LeetCode笔记】114. 二叉树展开为链表(Java、递归)

文章目录题目描述解法 & 思路思路一思路二题目描述 我佛了&#xff0c;这道题挺描述不明的&#xff0c;有坑&#xff0c;过不了oj建议马上看评论 or 题解 解法 & 思路 思路一 代码就不贴了&#xff0c;过不去先序遍历&#xff0c;按序存储val到一个ArrayList。然后用…

【LeetCode笔记】136. 只出现一次的数字(Java、位运算)

文章目录题目描述代码 & 思路题目描述 评论区一个评论很不错&#xff1a;不用额外空间&#xff0c;首先考虑位运算。 代码 & 思路 异或 ^ &#xff1a;相同得0与0得本身满足交换律那么好办了&#xff0c;abcdeabcd > aabbccdde > 0 0 0 0 e > e class So…

linux脚本写的计算器,一步步打造自己的linux命令行计算器

相信很多人&#xff0c;在工作中会需要使用到计算器。一般的做法是&#xff0c;打开并使用系统自带的计算器。这种做法可能对我来说&#xff0c;有如下几个问题。太慢。每次需要打开计算器&#xff0c;然后改成编程模式&#xff0c;手工选择进制&#xff0c;再使用输入表达式进…

【LeetCode笔记】141. 环形链表(Java、快慢指针、链表)

文章目录题目描述思路 & 代码题目描述 常见题&#xff0c;用上了久违的快慢指针 思路 & 代码 举个例子就能明白了&#xff1a;我和汽车&#xff0c;进行一场比赛&#xff0c;跑道可能是环形跑道&#xff0c;也可能是直道。直道的话&#xff0c;将会以汽车撞到终点为…