79. 单词搜索

ops/2025/3/19 23:17:51/

在这里插入图片描述
思路
每次以当前位置为初始位置开始遍历,看是否找到单词
(以官方题解做出)
v:代表等于work[k]且已走过的位置

d:四个方向

回溯(遍历):

匹配不上:终止

找到了:终止(先判断匹配再判断找到)

未终止,继续循环:记录当前已走过位置(等于work[k]),以当前位置向四周遍历,找到则往对应方向继续循环;四个方向都找不到匹配,则回退再继续遍历

python">class Solution(object):def exist(self, board, word):""":type board: List[List[str]]:type word: str:rtype: bool""""""回溯三部曲:满足结果、匹配不上、继续搜索"""#方向d=[(0,1),(0,-1),(1,0),(-1,0)]#已经走过的位置v = set()def backtrack(i,j,k):#匹配不上if board[i][j]!=word[k]:return False#满足结果if k==len(word)-1:return True#当前字符满足,继续往下搜 ,先标记已经走过的位置   走过的位置不能再走v.add((i,j))r = False#当前位置往四个方向继续搜索for s1,s2 in d:s,t=s1+i,s2+jif (s>=0 and s<len(board)) and (t>=0 and t<len(board[0])) and (s,t) not in v:if backtrack(s,t,k+1):return True#四个方向都找不到,回退v.remove((i,j))for i in range(len(board)):for j in range(len(board[0])):#每次以当前位置为起点开始遍历,查看是否找到if backtrack(i,j,0):return Truereturn False

超限(更容易理解):

python">class Solution(object):def exist(self, board, word):""":type board: List[List[str]]:type word: str:rtype: bool""""""回溯三部曲:满足结果、匹配不上、继续搜索"""#方向# d=[(0,1),(0,-1),(1,0),(-1,0)]def backtrack(i,j,k):#满足结果if board[i][j]==word[k] and k==len(word)-1:return True#匹配不上if board[i][j]!=word[k]:return False#当前字符满足,继续往下搜#先标记已经走过的位置   走过的位置不能再走temp=board[i][j]board[i][j]=1#超限# for s1,s2 in d:#     s,t=s1+i,s2+j#     if (s>=0 and s<len(board)) and (t>=0 and t<len(board[0])) and backtrack(s,t,k+1):#         return Trueif i-1>=0 and k+1<len(word) and backtrack(i-1,j,k+1):return Trueif j-1>=0 and k+1<len(word) and backtrack(i,j-1,k+1):return Trueif i+1<len(board) and k+1<len(word) and backtrack(i+1,j,k+1):return Trueif j+1<len(board[0]) and k+1<len(word) and backtrack(i,j+1,k+1):return True#四个方向都找不到,还原board[i][j]=tempfor i in range(len(board)):for j in range(len(board[0])):#每次以当前位置为起点开始遍历,查看是否找到if backtrack(i,j,0):return Truereturn False

http://www.ppmy.cn/ops/121664.html

相关文章

C++11中智能指针以及标准模板库 My_string My_stack

My_string.h #ifndef MY_STRING_H #define MY_STRING_H#include <iostream> #include <cstring> #include <stdexcept>using namespace std;template<typename T> class My_string { private:T *ptr; // 指向字符数组的指针int size; /…

Android常用C++特性之std::chrono

声明&#xff1a;本文内容生成自ChatGPT&#xff0c;目的是为方便大家了解学习作为引用到作者的其他文章中。 std::chrono 是 C11 引入的标准库中的时间处理工具&#xff0c;提供了以多种精度进行时间测量、处理和操作的功能。它允许开发者处理时间点&#xff08;time_point&am…

网络基础知识笔记(四)

路由器如何转发数据 路由&#xff1a; 从源主机到目的主机转发的过程 路由器工作原理&#xff1a; 根据路由表转发数据 路由表 路由器中维护的路由条目的集合 路由器根据路由表做路径选择 默认路由 当路由器在路由表中找不到目标网路的路由条目时&#xff0c;路由器把请求转…

网络基础 【HTTP】

&#x1f493;博主CSDN主页:麻辣韭菜&#x1f493;   ⏩专栏分类&#xff1a;Linux初窥门径⏪   &#x1f69a;代码仓库:Linux代码练习&#x1f69a; &#x1f4bb;操作环境&#xff1a; CentOS 7.6 华为云远程服务器 &#x1f339;关注我&#x1faf5;带你学习更多Linux知识…

ClickHouse 引擎的选择

ClickHouse 是一个高性能的列式数据库&#xff0c;适用于在线分析处理查询&#xff08;OLAP&#xff09;。选择正确的表引擎对于优化查询性能和数据存储至关重要。以下是一些常用的 ClickHouse 表引擎类型及其适用场景&#xff1a; 1. **MergeTree 家族**&#xff1a;这是 Cli…

【Docker从入门到进阶】01.介绍 02.基础使用

1. 介绍 什么是 Docker Docker 是一个开源的平台&#xff0c;用于开发、发布和运行应用程序。它使开发者能够以更精简的方式封装应用及其依赖&#xff0c;做到“打包一次&#xff0c;到处运行”。通过 Docker&#xff0c;您可以创建轻量级、可移植的容器&#xff0c;每个容器…

学籍管理平台|在线学籍管理平台系统|基于Springboot+VUE的在线学籍管理平台系统设计与实现(源码+数据库+文档)

在线学籍管理平台系统 目录 基于SpringbootVUE的在线学籍管理平台系统设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大…

Redis --- 第三讲 --- 通用命令

一、get和set命令 Redis中最核心的两个命令 get 根据key来取value set 把key和value存储进去 redis是按照键值对的方式存储数据的。必须要先进入到redis客户端。 语法 set key value &#xff1a; key和value都是字符串。 对于上述这里的key value 不需要加上引号&#…