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

力扣刷题Day 65:单词搜索(79)

1.题目描述

2.思路

方法1(自己写的深度优先的回溯方法):遍历网格,每走过一格都将其坐标加入visited集合,然后向上、下、左、右四个方向查找可行路径,如果找到可行路径则一路向下延伸查找,如不可行则将该坐标从集合里删除,回退到上一坐标继续查找。

方法2(参考Krahets佬的题解对方法1进行了优化):无需用tmp记录当前字符串,直接简化为记录当前字符串长度即可,可进一步节省空间(字符串tmp->整数k)与时间(startswith比较字符串->比较指定坐标的一个字符)。

3.代码(Python3)

方法1:

class Solution:def exist(self, board: List[List[str]], word: str) -> bool:def backtrack(tmp, i, j):print(tmp, i, j)if tmp == word: return Truefor (move_m, move_n) in {(-1, 0), (1, 0), (0, -1), (0, 1)}:if 0 <= i + move_m < m and 0 <= j + move_n < n and word.startswith(tmp + board[i][j]):tmp += board[i][j]if backtrack(tmp, i + move_m, j + move_n): return Truereturn Falsem, n= len(board), len(board[0])for i in range(m):for j in range(n):if board[i][j] == word[0]:return backtrack(board[i][j], i, j)return False

方法2:

class Solution:def exist(self, board: List[List[str]], word: str) -> bool:def backtrack(k, i, j):visited.add((i, j))if k == len(word) - 1: return Truefor (move_m, move_n) in {(-1, 0), (1, 0), (0, -1), (0, 1)}:if 0 <= i + move_m < m and 0 <= j + move_n < n and (i + move_m, j + move_n) not in visited and word[k + 1] == board[i + move_m][j + move_n]:if backtrack(k + 1, i + move_m, j + move_n): return Truevisited.discard((i, j))return Falsem, n = len(board), len(board[0])visited = set()for i in range(m):for j in range(n):if board[i][j] == word[0]:if backtrack(0, i, j): return Truereturn False

4.执行情况

方法1:

方法2:

5.感想

在高铁上完成了这道题,棒棒嘟~

http://www.xdnf.cn/news/726625.html

相关文章:

  • 吴恩达MCP课程(1):chat_bot
  • WordPress SureTriggers插件认证绕过漏洞(CVE-2025-3102)
  • springboot文件上传下载
  • 《系统集成项目管理工程师(第三版)》高效学习方法
  • leetcode108.将有序数组转换为二叉搜索树:递归切分中点构建平衡树的智慧
  • 传输层核心技术解析
  • HAProxy 可观测性最佳实践
  • 数据库查询性能优化:深入理解与应用物化视图
  • 设计学生管理系统的数据库
  • PostIn V1.1.2版本发布,新增接口评审功能,提升接口质量与合理性
  • 2025陕西省赛补题
  • Golang持续集成与自动化测试和部署
  • Go语言接口:灵活多态的核心机制
  • 马尔可夫链模型解析—24小时政策过山车,黄金拉升80美元V型反转路径
  • 前端antd,后端fastapi,解决文件上传
  • 【二维数组】
  • 【航天远景 MapMatrix 精品教程】08 Pix4d空三成果导入MapMatrix
  • Ubuntu 下同名文件替换后编译链接到旧内容的现象分析
  • Java String的使用续 -- StringBuilder类和StringBuffer
  • Linux(9)——进程(控制篇——下)
  • 架构分享|三层存储架构加速云端大模型推理
  • C与C++相互调用
  • LearnOpenGL-笔记-其十
  • 解决RAGFlow(v0.19.0)有部分PDF无法解析成功的问题。
  • JNI开发流程
  • Ubuntu 桌面版忘记账户密码的重置方法
  • BaseTypeHandler用法-笔记
  • 【Linux 学习计划】-- 进程状态 | 进程运行、阻塞和挂起的本质 | 并行、并发与进程切换 | 进程优先级
  • Flink2.0及Flink-operater在K8S上部署
  • 基于51单片机的音乐盒键盘演奏proteus仿真