力扣小白刷题之79题单词搜索

题目描述

给定一个二维网格和一个单词,找出该单词是否存在于网格中。
单词必须按照字母顺序,通过相邻的单元格内的字母组成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

思路

参考自:https://leetcode-cn.com/problems/word-search/solution/zai-er-wei-ping-mian-shang-shi-yong-hui-su-fa-pyth/

https://leetcode-cn.com/problems/word-search/solution/79java-hui-su-xiang-jie-by-ustcyyw/
在这里插入图片描述
在这里插入图片描述
二维平面上每个位置相当于都有4个岔路,如果某条路发现上下左右四个方向都无法找到 word 中下一个对应的字符,那么这个走法不对 ,但是不必要从头来走。比如在寻找 adcde 的时候:
* 从 a 不断向右走到第一行第四列的 d 时,发现右边和下边都不是 e(上边越界,左边已经走过不能再去),这条路径不对
* 但是没必要从头开始再找,只需要折返到 c,然后向下走即可。所以这显然应该使用回溯。
* a b c d d
* h e d f f

代码

在这里插入图片描述
在这里插入图片描述

注意

  1. start是下标,代表下一步要找 word 中索引为 start 的字符 当start == word.length,就代表所有字符都已经按顺序找到,需要退出return

  2. 不管是递归终止条件还是递归到下一层,首先的逻辑都得是先判断是否越界

  3. 递归终止条件要到最后一位匹配成功才返回true,这个true会层层返回到第一层

  4. 回溯时(也就是折返路径时),当前坐标要回退,所以恢复没有使用状态 visited[i][j] = false;

5.在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值