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

这篇具有很好参考价值的文章主要介绍了【LeetCode-中等题】79. 单词搜索。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目

【LeetCode-中等题】79. 单词搜索,力扣,# 中等题,leetcode,算法,职场和发展文章来源地址https://www.toymoban.com/news/detail-707473.html

方法一:递归 +回溯

  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当前的字符相等  才会往下递归 否则return
        if(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;
    }

}

到了这里,关于【LeetCode-中等题】79. 单词搜索的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 力扣79. 单词搜索

    思路: 定义函数 check(i,j,k) 为网格 (i,j) 位置出发能够搜索到单词 word(k),如果搜索到返回 true,否则返回 false; 搜索规则: 【R1】如果 board[i][j] != word[k],直接返回 false; 【R2】如果当前已经访问到字符串的末尾,且对应字符依然匹配,此时直接返回 true; 【R3】否则,遍历

    2024年01月18日
    浏览(39)
  • 力扣每日一题79:单词搜索

    给定一个  m x n  二维字符网格  board  和一个字符串单词  word  。如果  word  存在于网格中,返回  true  ;否则,返回  false  。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不

    2024年02月07日
    浏览(44)
  • 算法学习——LeetCode力扣图论篇3(127. 单词接龙、463. 岛屿的周长、684. 冗余连接、685. 冗余连接 II)

    127. 单词接龙 - 力扣(LeetCode) 描述 字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列 beginWord - s1 - s2 - … - sk: 每一对相邻的单词只差一个字母。 对于 1 = i = k 时,每个 si 都在 wordList 中。注意, beginWord 不需要在 wordList 中。 sk == endWord 给你两

    2024年04月09日
    浏览(77)
  • 【LeetCode力扣】11. 盛最多水的容器 (中等)

      目录 1、题目介绍 2、解题 2.1、解题思路  2.2、图解说明  2.3、解题代码 原题链接: 11. 盛最多水的容器 - 力扣(LeetCode) 示例 2: 提示: n == height.length 2 = n = 105 0 = height[i] = 104 这道题最优的方法就是用双指针,我们可以用指针 left 和指针 right 分别指向数组 height[ ] 的第一

    2024年02月06日
    浏览(47)
  • LeetCode_前缀树_中等_1268.搜索推荐系统

    给你一个产品数组 products 和一个字符串 searchWord ,products 数组中每个产品都是一个字符串。 请你设计一个推荐系统,在依次输入单词 searchWord 的每一个字母后,推荐 products 数组中前缀与 searchWord 相同的最多三个产品。如果前缀相同的可推荐产品超过三个,请按字典序返回最

    2024年02月16日
    浏览(43)
  • LeetCode_二分搜索_中等_2594.修车的最少时间

    给你一个整数数组 ranks ,表示一些机械工的 能力值 。ranksi 是第 i 位机械工的能力值。能力值为 r 的机械工可以在 r * n 2 分钟内修好 n 辆车。 同时给你一个整数 cars ,表示总共需要修理的汽车数目。请你返回修理所有汽车最少需要多少时间。 注意:所有机械工可以同时修理

    2024年02月09日
    浏览(43)
  • LeetCode_二叉搜索树_中等_236.二叉搜索树的最近公共祖先

    给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉搜

    2023年04月10日
    浏览(38)
  • 【LeetCode-中等】剑指 Offer 36. 二叉搜索树与双向链表

    剑指 Offer 36. 二叉搜索树与双向链表 后序遍历、二叉搜索树 二叉搜索树中的任一节点的 直接前驱为其左子树的最右侧节点,直接后继为其右子树的最左侧节点 。因此,可以通过这个关系来操作原来的二叉树。 为了不影响深度较大的节点的判断,使用后序遍历。 Step1. 后序遍

    2024年02月13日
    浏览(45)
  • 【LeetCode-中等题】230. 二叉搜索树中第K小的元素

    该题最大的特点就是这个树是二叉树: 所以, 中序遍历对二叉树的遍历本身就是有序的 思想很简单,就是通过层序遍历将节点都加到List集合中,然后调用 Collections.sort(list)排序后 ,找第k小的数 list.get(k-1) 二叉树中序遍历得到的值序列是递增有序的 借助一个list集合来接收有

    2024年02月10日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包