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

示例:

board =
[['A','B','C','E'],['S','F','C','S'],['A','D','E','E']
]给定 word = "ABCCED", 返回 true.
给定 word = "SEE", 返回 true.
给定 word = "ABCB", 返回 false.

解题方法:递归回溯

type pair struct{ x, y int }var directions = []pair{{-1, 0}, {1, 0}, {0, -1}, {0, 1}} // 上下左右func exist(board [][]byte, word string) bool {h, w := len(board), len(board[0])//初始化二维数组vis := make([][]bool, h)for i := range vis {vis[i] = make([]bool, w)}var check func(i, j, k int) boolcheck = func(i, j, k int) bool {if board[i][j] != word[k] { // 剪枝:当前字符不匹配return false}//k表示字符串对应的下标数即长度if k == len(word)-1 { // 单词存在于网格中return true}//已访问设置为truevis[i][j] = truedefer func() { vis[i][j] = false }() // 回溯时还原已访问的单元格for _, dir := range directions {//重新确定下标并判断下标的有效性和判断下标是否访问过if newI, newJ := i+dir.x, j+dir.y; 0 <= newI && newI < h && 0 <= newJ && newJ < w && !vis[newI][newJ] {if check(newI, newJ, k+1) {return true}}}return false}for i, row := range board {for j := range row {if check(i, j, 0) {return true}}}return false
}

递归回溯的思想,先判断单词第一个字符的是否存在,然后上下左右进行递归查找,每个位上亦是如此。如果发现字符不相等就直接return相当于剪枝操作。递归要注意终止条件,当到下标达到与字符串长度相等时,则结束递归。

参考链接:https://leetcode-cn.com/problems/word-search/solution/dan-ci-sou-suo-by-leetcode-solution/

小米面试题:单词搜索相关推荐

  1. 小米面试题:手机分身,电话号码隐藏。

    小米面试题: 手机分身,电话号码隐藏. 0-9分别对应ZERO,ONE,TWO,...,NINE 为保证手机拨号安全性,拨号后,存为对应的字符串,并打乱顺序,保证安全性. 现在给定一个字符串,求最小的 ...

  2. 【每日一题】212. 单词搜索 II

    212. 单词搜索 II 题目描述: 给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过 相邻 ...

  3. LeetCode算法题13:DFS/BFS - 单词搜索

    文章目录 单词搜索 DFS : 小小的优化 总结 单词搜索 题目链接:https://leetcode-cn.com/problems/word-search/ 题目描述: 给定一个 m x n 二维 ...

  4. C++words search单词搜索的算法实现(附完整源码)

    C++words search单词搜索的算法实现 C++words search单词搜索的算法实现完整源码(定义,实现,main函数测试) C++words search单词搜索的算法实现完整源码(定 ...

  5. LeetCode 212. 单词搜索 II(Trie树+DFS)

    1. 题目 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻&qu ...

  6. mysql 相关搜索_MySQL单词搜索相关度排名

    一个单词搜索的相关度排名,这个例子演示了一个单词搜索的相关度排名计算. mysql> CREATE TABLE articles ( -> id INT UNSIGNED AUTO_INC ...

  7. java 试题 历届试题 单词分析 题解

    试题 历届试题 单词分析 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组成,有些单词很长,远远超过正常英文单词的长度 ...

  8. 力扣—— 79/212. 单词搜索

    目录 79 单词搜索 212 单词搜索II 79 单词搜索 class Solution(object):#深度搜索def exist(self, board, word):self.flag=0se ...

  9. Leetcode 79.单词搜索

    Time: 20190901 Type: Medium 题目描述 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻&q ...

  10. 益智java单词游戏_java实现单词搜索迷宫游戏

    本文实例讲述了java实现单词搜索迷宫游戏.分享给大家供大家参考.具体分析如下: 我们在杂志上,经常能够看到找单词的小游戏,在一个二维表格中,存在各种字母,我们可以从八个方向找单词.这个用计算机处理十 ...

最新文章

  1. 机器人程序为啥要用Qt开发呢
  2. ECshop 数据库表结构
  3. ITK:使用最小最大曲率流平滑图像
  4. 如何让“GMV下降”实现自动化分析?
  5. Python基础----NumPy
  6. IDEA中.properties配置文件输入中文显示Unicode编码,本地编辑器,服务器打开显示Unicode编码问题解决方案
  7. 记一次golang cpu 占用100%
  8. 如何利用IDM加速下载百度网盘大文件
  9. 数据分析师工作的一点点感悟
  10. 文件的三种加载方式(全网讲解最全,最严谨)
  11. 功放DIY电路制作完成
  12. 剑指offer: 数组中数字出现的次数(曾在滴滴校招面试中遇到过)、leetcode消失的数字
  13. vue 中 vue-print-nb 表格打印不全的问题
  14. 【手把手反内卷】开创全新AI多模态任务一视听分割:代码实践、优化教程(二)
  15. UDS之浅谈14 服务
  16. FPGA(一)Vivado与ModelSim
  17. Unity3D笔记十八 GL图像库
  18. 在tomcat集群下利用redis实现单点登陆
  19. git操作如何提出你的第一个PR
  20. 【转】《致新员工书》

热门文章

  1. 【组合数学】生成函数 ( 生成函数应用场景 | 使用生成函数求解递推方程 )
  2. 【组合数学】基本计数原则 ( 加法原则 | 乘法原则 )
  3. Spring @CrossOrigin 通配符 解决跨域问题
  4. 呆呆键盘手11.14号学到的定位-实现滚动门效果
  5. python中的decode(编码)和encode(解码)
  6. POJ - 1509 Glass Beads
  7. 线程同步monitor
  8. Ubuntu怎么用c/c++编程
  9. JAVA-数据库之JDBC连接MySQL数据库
  10. Swift - 使用CollectionView实现图片Gallery画廊效果(左右滑动浏览图片)