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

代码随想录算法训练营|day30

第七章 回溯算法

  • 332.重新安排行程
  • 51.N皇后
  • 37.解数独
  • 代码随想录文章详解

332.重新安排行程

(1)参考
创建map存储src,[]dest映射关系,并对[]dest排序
每次取map中第一个dest访问,将其作为新的src,每访问一条src->dest,删除该记录。
如果访问的src没有dest了,将当前节点加入结果集,并沿栈返回。
结果是沿栈返回的,故需要逆序输出

func findItinerary(tickets [][]string) []string {res := []string{}m := make(map[string][]string, 0)for _, ticket := range tickets {src, dest := ticket[0], ticket[1]m[src] = append(m[src], dest)}for k:= range m {sort.Strings(m[k])}var help func(srcTicket string)help = func(srcTicket string) {for {if v, ok := m[srcTicket]; !ok || len(v) == 0 {break}tmp := m[srcTicket][0]m[srcTicket] = m[srcTicket][1:]help(tmp)}res = append(res, srcTicket)}help("JFK")for i, j := 0, len(res)-1; i < j; i, j = i+1, j-1 {res[i], res[j] = res[j], res[i]}return res
}

(2)回溯:超时了
排列问题。先对tickets排序,used记录当前车票是否被使用
若车票使用完并找到路径,返回,否则回溯查找路径

func findItinerary(tickets [][]string) []string {sort.Slice(tickets, func(i, j int) bool {return tickets[i][1] < tickets[j][1]})path := []string{"JFK"}used := make([]bool, len(tickets))var help func(srcTicket string, ticket [][]string) boolhelp = func(srcTicket string, ticket [][]string) bool {if len(path) == len(tickets)+1 {return true}for i, next := range tickets {if next[0] == path[len(path)-1] && !used[i] {path = append(path, next[1])used[i] = trueif help(next[1], tickets) {return true}path = path[:len(path)-1]used[i] = false}}return false}help("JFK", tickets)return path
}

51.N皇后

回溯
row控制递归深度,for循环控制列,进而确定当前位置
判断当前值是否有效:因为每行只选取一个位置,故只需判断列和正斜、反斜方向是否有皇后

func solveNQueens(n int) [][]string {res := [][]string{}board := make([][]string, n)for i := 0; i < n; i++ {board[i] = make([]string, n)}for i := 0; i < n; i++ {for j := 0; j < n; j++ {board[i][j] = "."}}var help func(row int, board [][]string) boolhelp = func(row int, board [][]string) bool {if row == n {temp := make([]string, n)for i, rowStr := range board {temp[i] = strings.Join(rowStr, "")}res = append(res, temp)}for i := 0; i < n; i++ {if isValid(n, row, i, board) {board[row][i] = "Q"if help(row+1, board) {return true}board[row][i] = "."}}return false}help(0, board)return res
}func isValid(n, row, col int, board [][]string) bool {for i := 0; i < row; i++ {if board[i][col] == "Q" {return false}}for i, j := row-1, col-1; i >= 0 && j >= 0; i, j = i-1, j-1 {if board[i][j] == "Q" {return false}}for i, j := row-1, col+1; i >= 0 && j < n; i, j = i-1, j+1 {if board[i][j] == "Q" {return false}}return true
}

37.解数独

回溯
当前位置有效性判断:行、列、九宫格数字不重复
如果当前位置能放数字,且有效,递归,否则回溯

func solveSudoku(board [][]byte) {var help func(board [][]byte) boolhelp = func(board [][]byte) bool {for i := 0; i < 9; i++ {for j := 0; j < 9; j++ {if board[i][j] == '.' {for k := '1'; k <= '9'; k++ {if isValid(i, j, byte(k), board) {board[i][j] = byte(k)if help(board) {return true}board[i][j] = '.'}}return false}}}return true}help(board)
}func isValid(row, col int, val byte, board [][]byte) bool {for i := 0; i < 9; i++ {if board[row][i] == val {return false}}for i := 0; i < 9; i++ {if board[i][col] == val {return false}}startRow := (row / 3) * 3startCol := (col / 3) * 3for i := startRow; i < startRow+3; i++ {for j := startCol; j < startCol+3; j++ {if board[i][j] == val {return false}}}return true
}

代码随想录文章详解

332.重新安排行程
51.N皇后
37.解数独
回溯总结篇

相关文章:

代码随想录算法训练营|day30

第七章 回溯算法 332.重新安排行程51.N皇后37.解数独代码随想录文章详解 332.重新安排行程 (1)参考 创建map存储src&#xff0c;[]dest映射关系&#xff0c;并对[]dest排序 每次取map中第一个dest访问&#xff0c;将其作为新的src&#xff0c;每访问一条src->dest&#xff…...

PHPExcel导出excel

PHPExcel下载地址 https://gitee.com/mirrors/phpexcelhttps://github.com/PHPOffice/PHPExcel 下载后目录结构 需要的文件如下图所示 将上面的PHPExcel文件夹和PHPExcel.php复制到你需要的地方 这是一个简单的示例代码 <?php$dir dirname(__FILE__); //require_once …...

ubuntu系统下c++ cmakelist vscode debug(带传参的debug)的详细示例

c和cmake的debug&#xff0c;网上很多都需要配置launch.json&#xff0c;cpp.json啥的&#xff0c;记不住也太复杂了&#xff0c;我这里使用cmake插件带有的设置&#xff0c;各位可以看一看啊✌(不知不觉&#xff0c;竟然了解了vscode中配置文件的生效逻辑&#x1f923;) 克隆…...

聊聊JIT优化技术

&#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是小徐&#x1f947;☁️博客首页&#xff1a;CSDN主页小徐的博客&#x1f304;每日一句&#xff1a;好学而不勤非真好学者 &#x1f4dc; 欢迎大家关注&#xff01; ❤️ 我们知道&#xff0c;想要把高级语言转变成计算…...

LabVIEW动平衡测试与振动分析系统

LabVIEW动平衡测试与振动分析系统 介绍了利用LabVIEW软件和虚拟仪器技术开发一个动平衡测试与振动分析系统。该系统旨在提高旋转机械设备的测试精度和可靠性&#xff0c;通过精确测量和分析设备的振动数据&#xff0c;以识别和校正不平衡问题&#xff0c;从而保证机械设备的高…...

《低功耗方法学》翻译——附录B:UPF命令语法

附录B&#xff1a;UPF命令语法 本章介绍了文本中引用的所选UPF命令的语法。 节选自“统一电源格式&#xff08;UPF&#xff09;标准&#xff0c;1.0版”&#xff0c;经该Accellera许可复制。版权所有&#xff1a;(c)2006-2007。Accellera不声明或代表摘录材料的准确性或内容&…...

Leetcode 3027. Find the Number of Ways to Place People II

Leetcode 3027. Find the Number of Ways to Place People II 1. 解题思路2. 代码实现 题目链接&#xff1a;3027. Find the Number of Ways to Place People II 1. 解题思路 这一题的话我也没想到啥特别好的思路&#xff0c;采用的纯粹是遍历剪枝的思路。 遍历的话好理解&…...

android inset 管理

目录 简介 Insets管理架构 Insets相关类图 app侧的类 WMS侧的类 inset show的流程 接口 流程 WMS侧确定InsetsSourceControl的流程 两个问题 窗口显示时不改变现有的inset状态 全屏窗口上的dialog 不显示statusbar问题 View 和 DecorView 设置insets信息 输入法显…...

Python中使用opencv-python库进行颜色检测

Python中使用opencv-python库进行颜色检测 之前写过一篇VC中使用OpenCV进行颜色检测的博文&#xff0c;当然使用opencv-python库也可以实现。 在Python中使用opencv-python库进行颜色检测非常简单&#xff0c;首选读取一张彩色图像&#xff0c;并调用函数imgHSV cv2.cvtColor…...

如何修改远程端服务器密钥

前言 一段时间没改密码后&#xff0c;远程就会自动提示CtrlAltEnd键修改密码。但我电脑是笔记本&#xff0c;没有end键。打开屏幕键盘按这三个键也没用。 解决方法 打开远程 1、远程端WINC 输入osk 可以发现打开了屏幕键盘 2、电脑键盘同时按住CtrlAlt&#xff08;若自身电…...

lnmp指令

LNMP官网&#xff1a;https://lnmp.org 作者: licess adminlnmp.org 问题反馈&技术支持论坛&#xff1a;https://bbs.vpser.net/forum-25-1.html 打赏捐赠&#xff1a;https://lnmp.org/donation.html 自定义参数 lnmp.conf配置文件&#xff0c;可以修改lnmp.conf自定义下…...

Go语言每日一题——链表篇(七)

传送门 牛客面试笔试必刷101题 ----------------删除链表的倒数第n个节点 题目以及解析 题目 解题代码及解析 解析 这一道题与昨天的题目在解题思路上有一定的相似之处&#xff0c;都是基于双指针定义快慢指针&#xff0c;这里我们让快指针先走n步&#xff0c;又因为n一定…...

【stomp实战】websocket原理解析与简单使用

一、WebSocket 原理 WebSocket是HTML5提供的一种浏览器与服务器进行全双工通讯的网络技术&#xff0c;属于应用层协议。它基于TCP传输协议&#xff0c;并复用HTTP的握手通道。浏览器和服务器只需要完成一次握手&#xff0c;两者之间就直接可以创建持久性的连接&#xff0c; 并…...

2024.1.30力扣每日一题——使循环数组所有元素相等的最少秒数

2024.1.30 题目来源我的题解方法一 暴力模拟&#xff08;无法通过&#xff09;方法二 哈希表数学 题目来源 力扣每日一题&#xff1b;题序&#xff1a;2808 我的题解 方法一 暴力模拟&#xff08;无法通过&#xff09; 直接暴力枚举。记录每一个元素所在的位置&#xff0c;然…...

【Java万花筒】数据魔术师:探索Java商业智能与数据可视化

开发者的数据魔杖&#xff1a;掌握Java商业智能工具的秘诀 前言 在当今信息爆炸的时代&#xff0c;数据已经成为企业决策和业务发展的重要驱动力。为了更好地理解和利用数据&#xff0c;商业智能&#xff08;BI&#xff09;和数据可视化工具变得至关重要。本文将介绍几种基于…...

python用yaml装参数并支持命令行修改

效果&#xff1a; 将实验用的参数写入 yaml 文件&#xff0c;而不是全部用 argparse 传&#xff0c;否则命令会很长&#xff1b;同时支持在命令行临时加、改一些参数&#xff0c;避免事必要在 yaml 中改参数&#xff0c;比较灵活&#xff08;如 grid-search 时遍历不同的 loss…...

第59讲订单数据下拉实现

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;/*** 订单查询 type值 0 全部订单 1待付款 2 待收货 3 退款/退货* param type* return*/RequestMapping("/list")public R list(Integer type,Integer page,Integer pageSize){System.out.pri…...

[当人工智能遇上安全] 11.威胁情报实体识别 (2)基于BiGRU-CRF的中文实体识别万字详解

您或许知道&#xff0c;作者后续分享网络安全的文章会越来越少。但如果您想学习人工智能和安全结合的应用&#xff0c;您就有福利了&#xff0c;作者将重新打造一个《当人工智能遇上安全》系列博客&#xff0c;详细介绍人工智能与安全相关的论文、实践&#xff0c;并分享各种案…...

16:定时器和计数器

定时器和计数器 1、定时器和计数器的介绍2、定时器是如何工作3、寄存器4、51单片机定时器简介&#xff08;数据手册&#xff09;5、定时器中的寄存器&#xff08;数据手册&#xff09;5.1、TCON&#xff08;定时器控制寄存器&#xff09;5.2、TMOD&#xff08;工作模式寄存器&a…...

c#通过ExpressionTree 表达式树实现对象关系映射

//反射expression实现对象自动映射 void Main() {Person p1new(){Id1,Name"abc"};var persondto p1.MapTo<Person, PersonDto>();Console.WriteLine($"id:{persondto.Id}-name:{persondto.Name}"); }public static class AutoMapperExs { public s…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...