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

LeetCode 单词搜索题解

LeetCode 单词搜索题解

题目描述

给定一个 m x n 的二维字符网格 board 和一个字符串单词 word,如果 word 存在于网格中,返回 true,否则返回 false。

示例

输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]],word = "ABCCED"
输出:true

解题思路

方法:回溯

思路

  • 使用回溯算法来解决这个问题。
  • 遍历网格中的每个单元格,作为起始位置。
  • 从起始位置开始,尝试所有可能的选择:
    • 如果当前字符等于单词的当前字符,继续向四个方向搜索。
    • 如果越界或字符不匹配,回溯。
    • 如果已经匹配到单词的最后一个字符,返回 true。
  • 使用一个访问数组来记录已访问的单元格。

复杂度分析

  • 时间复杂度:O(m * n * 4^k),其中 m 和 n 是网格的行数和列数,k 是单词的长度。
  • 空间复杂度:O(m * n),用于存储访问数组。

代码实现

方法:回溯

# 单词搜索(回溯) def exist(board, word): if not board or not board[0] or not word: return False m, n = len(board), len(board[0]) visited = [[False] * n for _ in range(m)] def backtrack(i, j, index): if index == len(word): return True if i < 0 or i >= m or j < 0 or j >= n or visited[i][j] or board[i][j] != word[index]: return False visited[i][j] = True for di, dj in [(0, 1), (0, -1), (1, 0), (-1, 0)]: if backtrack(i + di, j + dj, index + 1): visited[i][j] = False return True visited[i][j] = False return False for i in range(m): for j in range(n): if backtrack(i, j, 0): return True return False # 测试 def test_exist(): board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]] word = "ABCCED" print(exist(board, word)) # 输出:True board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]] word = "ABCB" print(exist(board, word)) # 输出:False if __name__ == "__main__": test_exist()

测试用例

测试用例 1:基本情况

输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]],word = "ABCCED"
输出:true

测试用例 2:不存在

输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]],word = "ABCB"
输出:false

总结

单词搜索是一个经典的回溯算法问题,它可以通过回溯算法来高效地解决。

回溯算法的核心思想是:从起始位置开始,尝试所有可能的移动方向,递归搜索,如果找到目标单词则返回 true,否则回溯。

掌握回溯算法的使用方法,对于解决类似的问题非常重要。

http://www.jsqmd.com/news/784665/

相关文章:

  • 即梦怎么去除水印?即梦去除水印教程+方法汇总,2026最新实测有效 - 爱上科技热点
  • 区块链与AI融合构建社会DAO:性勒索协同治理网络的技术架构与实践
  • 2026年重庆公司注册避坑指南:这5家服务商谁才是性价比之王! - 果果1998
  • CANN 填充梯度算子
  • 即梦视频怎样去水印?手机版使用方法和工具推荐|2026最新 实测教程 - 爱上科技热点
  • AI赋能教育:构建个性化自适应学习系统的技术架构与实战
  • 基于GPT的Python 2到3代码迁移:原理、实践与避坑指南
  • 华为CANN/opbase OP_OUTSHAPE宏
  • 2026卖家精灵优惠折扣码更新 跨境新手必看帮你少走弯路 - 李先生sir
  • 企业级AI决策系统实战:从知识图谱到多智能体协作的架构演进
  • 智能游戏助手:解放星穹铁道日常任务的终极效率方案
  • DevChat:AI编程助手如何无缝集成IDE,提升开发效率与代码质量
  • 自动驾驶AI算法演进:从L0到L5的技术跃迁与工程挑战
  • CANN/metadef GenerateTask接口
  • 强力破解Windows热键冲突:Hotkey Detective一键定位占用程序
  • 即梦视频怎么去水印?即梦如何无损下载?2026最新 去水印工具与方法实测指南 - 爱上科技热点
  • 强化学习优化量子反馈控制:从麦克斯韦妖到量子热机设计
  • CANN/driver设备故障查询API
  • 突破性技术方案:MyTV-Android实现安卓低版本系统流畅直播体验架构解析
  • Oumuamua-7b-RP效果展示:温度0.3 vs 1.2下角色性格稳定性对比实测
  • ChatGLM3-6B应用案例:打造个人知识库助手,长文本分析利器
  • CANN/ops-cv aclnn返回码详解
  • 机器学习性能基线:Zero Rule算法原理与Weka实践
  • 上下文向量在NLP中的三大实战应用
  • CANN / community 开源代码片段引入操作指南
  • CANN/cann-learning-hub:AICPU Tiling下沉编程
  • 数字孪生安全:从数据泄露到物理攻击的工业4.0风险全景与防护实践
  • GitHub Profile动态化:用SVG与Twitter API打造个人技术名片
  • 为内部知识库问答系统配置 Taotoken 作为可靠大模型后端
  • CANN/driver DCMI设备cgroup信息获取