深度优先搜索|79, 695,212

深度优先搜索|79. 单词搜索, 695. 岛屿的最大面积, 212. 单词搜索 II

  • 单词搜索
  • 岛屿的最大面积
  • 单词搜索II

单词搜索

用的是深度优先搜索,这种判断类型的回溯我就一直不知道要怎么回退,然后勉强写了一个。
这里还有一个注意事项就是,走到最后一个元素的时候,我设置的direction list里头就只有用过的几个元素,再加上我写的if used这个时候他就走不下去了,也不会到下一层的index+1了,这个时候又可以观察到,如果走到最后有一个元素了和word也对得上其实并不需要再去看有没有direction了,直接去index+1不用管i,j是谁就能直接True,所以这个地方可以加一个判断就是如果走到这里已经在word最后一个字母后面了,直接True。
然后写到这里就会发现,如果直接出去了,那么

if index == len(word):return True 

这句好像根本不需要,后来发现确实不需要。

class Solution:def exist(self, board: List[List[str]], word: str) -> bool:def direction(i,j,m,n):l = [[i-1,j],[i+1,j],[i,j-1],[i,j+1]]if i == 0:l.remove([i-1,j])if j == 0:l.remove([i,j-1])if i == m-1:l.remove([i+1,j])if j == n-1:l.remove([i,j+1])return l def backtracking(index,i,j):#if index == len(word):#return True l = direction(i,j,m,n)if board[i][j] != word[index]: return Falseused[i][j] = Truefor k1,k2 in l:if index == len(word) - 1:return True if used[k1][k2]: continueif backtracking(index+1,k1,k2):return Trueif l == [] and index == len(word)-1:return Trueused[i][j] = Falsereturn Falsem = len(board)n = len(board[0])used = [[False]*n for _ in range(m)]for i in range(m):for j in range(n):if backtracking(0,i,j):return True return False

岛屿的最大面积

这个题没上面的难,因为他知道是1都是连着的,所以不用回退。

class Solution:def maxAreaOfIsland(self, grid: List[List[int]]) -> int:def direction(i,j,m,n):l = [[i-1,j],[i+1,j],[i,j-1],[i,j+1]]if i == 0:l.remove([i-1,j])if j == 0:l.remove([i,j-1])if i == m-1:l.remove([i+1,j])if j == n-1:l.remove([i,j+1])return l m = len(grid)n = len(grid[0])used = [[False]*n for _ in range(m)]def backtracking(i,j):nonlocal resif grid[i][j] == 0: return 0l = direction(i,j,m,n)res += 1used[i][j] = Truefor k1,k2 in l:if used[k1][k2]:continuebacktracking(k1,k2)return island = 0for i in range(m):for j in range(n):res = 0backtracking(i,j)island = max(island,res)return island

单词搜索II

在上一题的基础上加了一层循环,然后剪枝了一下,大多数还是能运行,就是太长了就超时了
42 / 65,这里有个要点是,每次单词的used list都要重新设,不然路都堵死了。

class Solution:def findWords(self, board: List[List[str]], words: List[str]) -> List[str]:def direction(i,j,m,n):l = [[i-1,j],[i+1,j],[i,j-1],[i,j+1]]if i == 0:l.remove([i-1,j])if j == 0:l.remove([i,j-1])if i == m-1:l.remove([i+1,j])if j == n-1:l.remove([i,j+1])return l def backtracking(index,word,i,j):l = direction(i,j,m,n)if board[i][j] != word[index]: return Falseused[i][j] = Truefor k1,k2 in l:if index == len(word) - 1:return True if used[k1][k2]: continueif backtracking(index+1,word,k1,k2):return Trueif l == [] and index == len(word)-1:return Trueused[i][j] = Falsereturn Falsem = len(board)n = len(board[0])res = []for k in words:used = [[False]*n for _ in range(m)]for i in range(m):if k in res:breakfor j in range(n):#print(i,j,k,res)if k in res:breakif backtracking(0,k,i,j):res.append(k)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/14167.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[JAVAee]定时器

目录 定时器的含义 定时器的使用 定时器的解析 ①TaskQueue ​②TimerThread ③Timer 定时器的模拟实现 ①创建Task自定义类型 ②创建TimerThread类 ③Timer类 完整代码 定时器的含义 从名字上看,就是我们通俗理解的那个定时器.设置一定的时间,并在一定的时间后发生…

安卓抓包神奇黄鸟HttpCanary安装配置及使用教程

1、下载安装包 黄鸟抓包下载地址 2、安装下载的apk 3、证书安装问题 vivo手机我安装时打开黄鸟app,会直接弹出,直接安装即可 其他手机,需要去系统设置中安装 3.1 搜索 证书,选择CA证书 3.2 进行本人操作验证 3.3 安装HttpCa…

黄东旭:The Future of Database,掀开 TiDB Serverless 的引擎盖

在 PingCAP 用户峰会 2023 上, PingCAP 联合创始人兼 CTO 黄东旭 分享了“The Future of Database”为主题的演讲, 介绍了 TiDB Serverless 作为未来一代数据库的核心设计理念。黄东旭 通过分享个人经历和示例,强调了数据库的服务化而非服务化…

WPF实战学习笔记24-首页编辑与完成

首页编辑与完成 indexview添加Listbox控件的鼠标双击行为 添加todo、memo的编辑命令indexviewmodel添加对应的更新事件处理 添加ToggleButton与后台的绑定 将ToggleButton的ischeck绑定到status属性添加bool int 转换器添加完成命令添加完成功能函数 Listbox添加行为 给行为…

C语言假期作业 DAY 01

题目 1.选择题 1、执行下面程序,正确的输出是( ) int x5,y7; void swap() { int z; zx; xy; yz; } int main() { int x3,y8; swap(); printf("%d,%d\n",x, y)…

Android Studio 代码模板插件实现

Android Studio 代码模板插件 背景 可以跳过背景和简述,从模板插件实现开始看. 开发新页面时,原先需要写一堆模板代码。比如用Databinding写列表结构的页面,需要手写以下文件: XxActivity.ktXxFragment.ktXxViewModel.ktXxListA…

一、SpringBoot基础[日志]

一、日志 解释:SpringBoot使用logback作为默认的日志框架,其中还可以导入log4j2等优秀的日志框架 1.修改日志内容 修改整个日志格式:logging.pattern.console%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{15} 你好 %msg%n %d{yyy…

基于K8s环境·使用ArgoCD部署Jenkins和静态Agent节点

今天是「DevOps云学堂」与你共同进步的第 47天 第⑦期DevOps实战训练营 7月15日已开营 实践环境升级基于K8s和ArgoCD 本文节选自第⑦期DevOps训练营 , 对于训练营的同学实践此文档依赖于基础环境配置文档, 运行K8s集群并配置NFS存储。实际上只要有个K8s集…

CAD .NET 15.0 企业版 Crack

CAD .NET 15.0 企业版 企业版 企业版 企业版 企业版 Updated: June 14, 2023 | Version 15.0 NEW CAD .NET is a library for developing solutions in .NET environment. It supports AutoCAD DWG/ DXF, PLT and other CAD formats. The library can be used in a wide rang…

C语言之pthread_cond_t信号变化探究总结(八十)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

【RabbitMQ(day2)】默认(直连)交换机的应用

文章目录 一、第一种模型(Hello World)二、第二种模型(work queue)自动确认机制的后果和公平分配 三、阐述默认交换机 这篇博客是以下资料学后的总结: 不良人的RabbitMQ的教学视频 官方启动教程 RabbitMQ中文文档 一、…

基于TCP/IP对等模型对计算机网络知识点的整合

目录 前言 应用层 Telnet SSH FTP/TFTP SNMP:简单的网络管理协议 HTTP:超文本传输协议 SMTP:电子邮件传输协议 DNS:域名解析协议 DHCP:动态主机配置协议 NTP:网络时钟协议 传输层 TCP UDP 端…

【SQL语句】

目录 一、SQL语句类型 1.DDL 2.DML 3.DLL 4.DQL 二、数据库操作 1.查看 2.创建 2.1 默认字符集 2.2 指定字符集 3.进入 4.删除 5.更改 5.1 库名称 5.2 字符集 三、数据表操作 1.数据类型 1.1 数值类型(常见,下同) 1.1.1 T…

ChatGPT长文本对话输入方法

ChatGPT PROMPTs Splitter 是一个开源工具,旨在帮助你将大量上下文数据分成更小的块发送到 ChatGPT 的提示,并根据如何处理所有块接收到 ChatGPT(或其他具有字符限制的语言模型)的方法。 推荐:用 NSDT设计器 快速搭建可…

【QT】Day3

1. 完成闹钟的实现&#xff1a; widgt.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug> #include <QTimerEvent> //定时器事件处理函数 #include <QTime> //时间类 #include <QTextToSpeech> //文本转语音类头…

Jmap-JVM(十六)

上篇文章说了ZGC是jdk11加入的&#xff0c;他是未来jvm垃圾收集器的奠定者&#xff0c;满足TB级别内存处理&#xff0c;STW时间保持在10ms以下。 Jmap 我们可以先通过jmap -histo 进程ip 来查看&#xff0c;但是这样看不太清晰&#xff0c;我们可以用这行命令生成一个文件&…

机器学习:GPT3

GPT3 模型过于巨大 GPT3是T5参数量的10倍&#xff01; 训练GPT3的代价是$12百万美元 Zero-shot Ability GPT3的思想是不是能拿掉Fine-tune 只需要给定few-shot或者zero-shot就能干相应的任务了。 few-shot learning&#xff08;no gradient descent&#xff09;&#…

数据结构---栈

(一)栈之基础补充 C语言内存分配 对于一个C语言程序而言,内存空间主要由五个部分组成 代码段(text)、数据段(data)、未初始化数据段(bss),堆(heap) 和 栈(stack) 组成,其中代码段,数据段和BSS段是编译的时候由编译器分配的,而堆和栈是程序运行的时候由系统分配的。布局如…

生命在于折腾——面试问题汇总

这里面的问题都是我参加面试时候遇到的问题&#xff0c;大家就这样看吧。 一、个人情况 1、自我介绍 2、为什么离开上一家公司 3、有没有参加过HVV 4、介绍一下上家公司的项目 5、小程序和公众号渗透测试做过么 6、实习工资多少 7、有挖过漏洞么 二、基础知识 1、信息收集的…

遇到本地跨域问题时候webpack本地开发配置proxy的方式

if (location.host.indexOf("localhost") ! -1) {baseUrl IP /pc /cfsm;} else {//这里不许改&#xff0c;谁改谁请30杯奶茶&#xff0c;并且罚款500baseUrl ""; } const api {user: baseUrl "/web-user",excel: baseUrl "/web-exce…