Time: 20190901
Type: Medium

题目描述

给定一个二维网格和一个单词,找出该单词是否存在于网格中。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用

示例:

board =
[['A','B','C','E'],['S','F','C','S'],['A','D','E','E']
]

给定 word = “ABCCED”, 返回 true.
给定 word = “SEE”, 返回 true.
给定 word = “ABCB”, 返回 false.

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/word-search
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

回溯算法,从第一个匹配的字符继续上下左右探索匹配(注意越界控制)。

代码

from typing import Listclass Solution:#         (x-1,y)# (x,y-1) (x,y) (x,y+1)#         (x+1,y)directions = [(0, -1), (-1, 0), (0, 1), (1, 0)]def exist(self, board: List[List[str]], word: str) -> bool:m = len(board)if m == 0:return Falsen = len(board[0])marked = [[False for _ in range(n)] for _ in range(m)]for i in range(m):for j in range(n):# 对每一个格子都从头开始搜索if self.__search_word(board, word, 0, i, j, marked, m, n):return Truereturn Falsedef __search_word(self, board, word, index,start_x, start_y, marked, m, n):# 先写递归终止条件if index == len(word) - 1:return board[start_x][start_y] == word[index]# 中间匹配了,再继续搜索if board[start_x][start_y] == word[index]:# 先占住这个位置,搜索不成功的话,要释放掉marked[start_x][start_y] = Truefor direction in self.directions:new_x = start_x + direction[0]new_y = start_y + direction[1]# 注意:如果这一次 search word 成功的话,就返回if 0 <= new_x < m and 0 <= new_y < n and \not marked[new_x][new_y] and \self.__search_word(board, word,index + 1,new_x, new_y,marked, m, n):return Truemarked[start_x][start_y] = Falsereturn False

相似题目

Leetcode 212.单词搜索II

参考

https://leetcode-cn.com/problems/word-search/solution/

END.

Leetcode 79.单词搜索相关推荐

  1. Leetcode 79. 单词搜索

    Leetcode 79. 单词搜索 1.问题分析 2.问题解决 3.总结 1.问题分析 题目链接:https://leetcode-cn.com/problems/word-search/   本质上 ...

  2. LeetCode 79 单词搜索

    LeetCode 79 单词搜索 题目链接 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水 ...

  3. java实现英文文件单词搜索系统_Java实现 LeetCode 79 单词搜索

    79. 单词搜索 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格. ...

  4. LeetCode 79. 单词搜索【c++/java详细题解】

    目录 1.题目 2.思路 3.c++代码 4.java代码 1.题目 给定一个 m x n 二维字符网格 board和一个字符串单词 word .如果 word 存在于网格中,返回 true :否则, ...

  5. LeetCode 79. 单词搜索 | Python

    文章目录 79. 单词搜索 题目 解题思路 代码实现 实现结果 总结 79. 单词搜索 题目来源:https://leetcode-cn.com/problems/word-search 题目 给定一 ...

  6. Java实现 LeetCode 79 单词搜索

    79. 单词搜索 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格. ...

  7. LeetCode 79单词搜索80删除排序数组中的重复项Ⅱ81.搜索旋转排序数组Ⅱ

    新人公众号(求支持):bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注回复进群即可加入力扣打 ...

  8. LeetCode - #79 单词搜索(Top 100)

    前言 本题为 LeetCode 前 100 高频题 我们社区陆续会将顾毅(Netflix 增长黑客,<iOS 面试之道>作者,ACE 职业健身教练.)的 Swift 算法题题解整理为文字版 ...

  9. LeetCode 79. 单词搜索(回溯DFS)

    1. 题目 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格.同一个 ...

最新文章

  1. 日志多租户架构下的Loki方案
  2. 源码安装nginx开启SSL功能
  3. SAE上传web应用(包括使用数据库)教程详解及问题解惑
  4. 开启 Truffle Ganache  MetaMask交互
  5. 超级计算机的英语作文80字,英语作文_为什么这台超级计算机如此快? (有声) _沪江英语...
  6. matlab工程计算及应用 课程名称,《 MATLAB 工程计算及应用》教学大纲课程名称MATLAB 工程计算及应用.pdf...
  7. 人民用不起的共享充电宝,可能还被植入了木马,这三类要慎用!
  8. centos7安装rabbitmq_rabbitmq v3.7.16安装部署文档
  9. 关于管理者应该拥有的的六十…
  10. kl距离 java_相对熵(relative entropy或 Kullback-Leibler divergence,KL距离)的java实现(三)...
  11. StuQ IT技能图谱全集
  12. Photoshop插件-证件照-白红蓝底-PS插件-脚本开发
  13. c++的复制省略(copy elision)
  14. 图的存储结构(邻接矩阵和邻接表)
  15. ECharts 示例——圆环图:数据标签详细设置
  16. Windows 10 更新遇到错误代码 0x80240034 的解决方法
  17. RHCE考点-个人见解
  18. LINUX内核第一霸
  19. 宝藏!揭秘如何写好软考论文框架1000+字
  20. 【Java项目实战】在线音乐播放器(从需求到产品完整解析)

热门文章

  1. 数据结构上机实践第八周项目1- 建立顺序串的算法库
  2. CListCtrl,SetItemState 高亮(显示蓝色)
  3. oracle把ascii吗,oracle中ascii函数及to_char函数使用及编码间的转换
  4. 智能判断图片中是否存在某物体_基于WT901传感器及NB-IOT无线技术开发的一款物体倾倒监测设备...
  5. oracle catalog命令,catalog 命令
  6. mysql5.6 多实例 主从安装_MySQL5.6一主多从的半同步复制实例
  7. python getattr用法_python3,定制类,getattr相关用法
  8. 中的枚举属性函数_对于 JavaScript 中循环之间的技术差异分析
  9. 熊猫删除重复行– drop_duplicates()函数
  10. 选择对话框 android_Android日期时间选择器对话框