当前位置: 首页 > news >正文

【LeetCode-中等题】79. 单词搜索

文章目录

    • 题目
    • 方法一:递归 +回溯

题目

在这里插入图片描述

方法一:递归 +回溯

  1. 需要一个标记数组 来标志格子字符是否被使用过了
  2. 先找到word 的第一个字符在表格中的位置,再开始递归
  3. 递归的结束条件是如果word递归到了最后一个字符了,说明能在矩阵中找到单词
  4. 剪枝条件 就是如果已经找到单词了 res = true 了 后面就不需要递归了,还有如果下标越界、当前格子被使用过了、 或者当前格子字符不和当前wordIdenx相同 都直接剪枝 不往下递归了
  5. 并且在对当前位置进行四个方向递归的时候,需要将该位置标志数组置为true代表使用过了
  6. 在将四个方向递归完了,要把当前位置的标志位修改回来,回溯
class Solution {boolean res = false;//结果标志位int r = 0;//全局 矩阵长宽int c = 0;boolean[][] usered = null;public boolean exist(char[][] board, String word) {r = board.length;c = board[0].length;// 同一个单元格内的字母不允许被重复使用!!!// 标识字母是否被使用usered = new boolean[r][c];char[] chars = word.toCharArray();// 将字符串转换为字符数组//在矩阵中找到word第一个字符再进行递归for(int i = 0 ; i < r ; i++)for(int j = 0 ; j < c ; j++){          if(board[i][j] == chars[0]) backtrack(board,i,j,chars,0,usered);  // 0代表word第一个字符 usered 标记已经使用过的表格}return res;}public void backtrack(char[][] board,int i,int j,char[] chars,int wordIndex,boolean[][] usered){if(res) return;// 已找到答案直接结束if(wordIndex == chars.length) {res = true ; return;}// 越界 或者不相等// i 和 j 要在矩阵范围内   并且标志位要是fasle  并且当前矩阵格子的字符要是 word当前的字符相等  才会往下递归 否则returnif(i < 0 || j < 0 || i > r-1 || j > c-1 || usered[i][j] || board[i][j] != chars[wordIndex]) return;// 往下递归  说明符合条件// 标记已经被使用usered[i][j] = true;//四个方向递归backtrack(board,i-1,j,chars,wordIndex+1,usered); backtrack(board,i+1,j,chars,wordIndex+1,usered); backtrack(board,i,j-1,chars,wordIndex+1,usered); backtrack(board,i,j+1,chars,wordIndex+1,usered); // 回溯恢复状态usered[i][j] = false;}}
http://www.lryc.cn/news/159339.html

相关文章:

  • 揭秘iPhone 15 Pro Max:苹果如何战胜三星
  • 分布式秒杀方案--java
  • 高频golang面试题:简单聊聊内存逃逸?
  • 【2023年数学建模国赛C题解题思路】
  • Jenkins+Allure+Pytest的持续集成
  • yo!这里是进程控制
  • 多线程快速入门
  • Redis 7 第七讲 哨兵模式(sentinal)架构篇
  • laravel框架系列(一),Dcat Admin 安装
  • Linux:工具(vim,gcc/g++,make/Makefile,yum,git,gdb)
  • 小节1:Python字符串打印
  • 2023国赛C题解题思路代码及图表:蔬菜类商品的自动定价与补货决策
  • 数据可视化工具中的显眼包:奥威BI自带方案上阵
  • LeetCode算法心得——生成特殊数字的最少操作(贪心找规律)
  • 【2023高教社杯】B题 多波束测线问题 问题分析、数学模型及参考文献
  • 如何处理异步编程中的回调地狱问题?
  • 什么是Lambda表达式?
  • 公式trick备忘录
  • 向量数据库Milvus Cloud核心组件再升级,主打就是一个低延迟、高准确度
  • ELK框架Logstash配合Filebeats和kafka使用
  • 后端面试话术集锦第 十二 篇:java基础部分面试话术
  • 【广州华锐互动】电厂三维数字孪生大屏的功能和优势
  • es6解构用法
  • a_bogus 音 算法还原大赏
  • 【计算机网络】UDP协议详解
  • 2023-9-8 满足条件的01序列
  • 获取街道、乡镇级的地图geoJson数据,使用echarts绘制地图
  • DBMS_RESOURCE_MANAGER
  • 通俗讲解傅里叶变换
  • 数据结构——带头双向循环链表