力扣刷题Day 67:N 皇后(51)

article/2025/6/30 13:54:03

1.题目描述

2.思路

方法1(自己写的传统型回溯):将第一行的皇后依次放置在0 ~ n - 1上,可以发现0 ~ (⌊n / 2⌋ - 1)上的放置方案与⌈n / 2⌉ ~ (n - 1)上的放置方案是对称的,此外,如果n是奇数的话还需额外考虑⌊n / 2⌋处的放置方案。声明一个长度为n的布尔数组unselected标记当前方案里每一列的占用情况(False即当前索引列未占用,True即当前索引列已占用),然后用回溯的方法深度优先搜索可行的放置方案。判断当前方案是否可行的条件就是题目当中所说的棋子们不能出现同在一行/一列/斜线上的情况,不能在同一行所以每次回溯都要将row加1,不能在同一列所以每次回溯都要在unselected里面选择值为0的索引对应列,不能在同一斜线上所以每次回溯前都要判断两行之差的绝对值与两列之差的绝对值是否相等(之所以加绝对值判断是因为既有y = x方向上的斜线又有y = -x方向上的斜线)。

方法2(灵茶山艾府佬的排列型回溯):灵神题解的精髓就在于,将这个问题看作枚举列号的全排列然后剔除皇后相互攻击的情况(灵神判断皇后相互攻击的方法是,两个皇后的行号加列号相等或行号减列号相等)。

3.代码(Python3)

方法1:

class Solution:def solveNQueens(self, n: int) -> List[List[str]]:def backtrack(row ,col, tmp):tmp.append([row, col])unselected[col] = Trueif row == n - 1:res.append(["." * q_col + "Q" + "." * (n - q_col - 1) for q_row, q_col in tmp])tmp.pop()unselected[col] = Falsereturnfor i in range(len(unselected)):if not unselected[i]:diagonal = Falsefor q_row, q_col in tmp:if abs(row + 1 - q_row) == abs(i - q_col):diagonal = Truebreakif not diagonal: backtrack(row + 1, i, tmp)tmp.pop()unselected[col] = Falsereturnres = []unselected = [False] * n# 计算左半边for i in range(int(n / 2)):backtrack(0, i, [])# 将左半边复制给右半边for i in range(len(res)):tmp = []for row in res[i]:tmp.append(row[:: -1])res.append(tmp)# 若n为奇数则需额外计算中间一列if n % 2 != 0:backtrack(0, int(n / 2), [])return res

方法2:

class Solution:def solveNQueens(self, n: int) -> List[List[str]]:def dfs(i):if i == n:res.append(['.' * j + 'Q' + '.' * (n - j - 1) for j in tmp])return# 在(i, j)放置皇后for j, ok in enumerate(col):if not ok and not diagonal_1[i + j] and not diagonal_2[i - j]:tmp[i] = jcol[j] = diagonal_1[i + j] = diagonal_2[i - j] = Truedfs(i + 1)col[j] = diagonal_1[i + j] = diagonal_2[i - j] = Falseres = []tmp = [0] * n # 皇后的坐标是(i, tmp[i])col = [False] * n # diagonal_1 = [False] * (2 * n - 1) # 之前放置的皇后的行号加列号diagonal_2 = [False] * (2 * n - 1) # 之前放置的皇后的行号减列号dfs(0)return res

4.执行情况

方法1:

方法2:

5.感想

灵神的代码其实我没仔细研究,只是粗看了一下,大佬就是大佬,代码的精简度和高效我只能望其项背。


http://www.hkcw.cn/article/KGNkhkIDiZ.shtml

相关文章

超级 AI 助手进阶攻略:Reflection 模式,开启 Agent 智能飞跃之旅

反思之言: 你有没有注意到,同样是AI,有些能帮你写代码、做决策,甚至聊人生;而有些却连基本的问题都答不对?这背后其实有一个关键差异:它会不会“反思”自己。 所谓Reflection(反思…

[RoarCTF 2019]Easy Calc

查看源代码 <!--Ive set up WAF to ensure security.--> <script>$(#calc).submit(function(){$.ajax({url:"calc.php?num"encodeURIComponent($("#content").val()),type:GET,success:function(data){$("#result").html(<div …

【LLM】AI Agents vs. Agentic AI(概念应用挑战)

note AI Agent 已经可以自动感知环境、拆解任务、并灵活应对变化&#xff1b;与此同时&#xff0c;Agentic AI 又一次将“协作”提到新高度&#xff0c;让多个小团队般的 Agent 分工协作&#xff0c;共同实现“更高层次的目标”AI Agents 将在五个关键领域实现突破&#xff1a…

UE5 2D地图曝光太亮怎么修改

UE5 2D地图曝光怎么修改 在场景添加后期处理体积 修改后期处理体积Exposure曝光参数最大值最小值都改为0 勾选Infinite Extend 全地图范围应用此后期处理体积

pikachu通关教程-File Inclusion

文件包含漏洞 本地文件包含 http://127.0.0.1:1000/pikachu/vul/fileinclude/fi_local.php?filenamefile1.php&submit%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2 首先我们把file1改成file2&#xff0c;发现切换成功 那我们可不可以上传本地文件呢&#xff0c;答案是肯定的&a…

树莓派实验

一、在树莓派上完成驱动程序控制的 PWM LED灯。 1.PWM概述 PWM&#xff08;Pulse Width Modulation&#xff0c;脉宽调制&#xff09; 是一种通过调节信号脉冲宽度来模拟不同幅度模拟信号的技术。它通过周期性地改变信号的占空比&#xff08;即在一个信号周期内&#xff0c;高…

【HarmonyOS 5】鸿蒙应用实现发票扫描、文档扫描输出PDF图片或者表格的功能

【HarmonyOS 5】鸿蒙应用实现发票扫描、文档扫描输出PDF图片或者表格的功能 一、前言 图(1-1) HarmonyOS 的 ** 文档扫描控件(DocumentScanner)** 是 AI Vision Kit 提供的核心场景化视觉服务,旨在帮助开发者快速实现移动端文档数字化功能。 其核心能力包括:扫描合同、…

volatile,synchronized,原子操作实现原理,缓存一致性协议

文章目录 缓存一致性协议&#xff08;MESI&#xff09;volatile1. volatile 的作用2.volatile的底层实现3,volatile 实现单例模式的双重锁&#xff08;面手写&#xff09; synchronized1,基本用法2,可重入性3,Java对象头4,实现原理&#xff08;1&#xff09;代码块同步的实现&a…

Arch安装botw-save-state

devkitPro https://blog.csdn.net/qq_39942341/article/details/148387077?spm1001.2014.3001.5501 cargo https://blog.csdn.net/qq_39942341/article/details/148387783?spm1001.2014.3001.5501 megaton https://blog.csdn.net/qq_39942341/article/details/148388164?spm…

15-2021剑侠情缘2-各种修复完善+虚拟机单机端+外网服务端整理+文本教程+视频教程

任务完善 泉州三大BOSS 剑荡燕云 藏剑 通天顶 梁上等————–

css使用scoped之后样式失效问题

项目中的vue代码原本用的style标签来写css&#xff0c;现在想改成<style langscss scoped>&#xff0c;但是改完之后发现样式不对&#xff1a; 原来是&#xff1a; 将style改成scoped之后变成了&#xff1a;检查发现是之前定义的一些变量无法被识别&#xff0c;导致这些样…

大模型的开发应用(六):使用 Xtuner QLoRA 微调模型

这里写目录标题 0 前言1 Xtuner 简介1.1 主要特点1.2 核心功能1.3 优势与不足1.4 安装 2 数据集格式2.1 开源数据集2.2 自定义数据集2.3 数据集存放位置 3 微调大模型3.1 Qwen1.5的QLoRA配置文件3.2 修改配置文件&#xff08;1&#xff09;PART 1 基本设置&#xff08;2&#x…

cursor如何开启自动运行模式

在Cursor中&#xff0c;开启自动运行模式即启用“Yolo Mode”&#xff0c;具体操作如下&#xff1a; 按下Ctrl Shift J&#xff08;Windows/Linux&#xff09;或Cmd Shift J&#xff08;Mac&#xff09;打开Cursor设置。导航到“Features”&#xff08;功能&#xff09;选…

Visual Studio 2022 加载解决方案缓慢

Visual Studio 2022 加载解决方案加载缓慢 1.进入工具选项卡2.修改环境中的预览功能3.修改文本编辑器中的C#对应的高级选项 1.进入工具选项卡 工具 -> 选项 2.修改环境中的预览功能 环境 -> 预览功能 -> 更快加载项目&#xff08;某些功能可能会延迟&#xff09; 3.…

基于TMC5160 StallGuard2技术的工件搬运与尺寸检测融合系统

点击下面图片带您领略全新的嵌入式学习路线 &#x1f525;爆款热榜 90万阅读 1.6万收藏 1 系统设计目标与创新价值 在现代智能制造系统中&#xff0c;传统自动化产线面临一个普遍存在的技术痛点&#xff1a;工件搬运与尺寸检测通常需要分离的子系统完成。这种分离不仅增加了…

github 提交失败,连接不上

1. 第一种情况&#xff0c;开了加速器&#xff0c;导致代理错误 删除hosts文件里相关的github代理地址 2. 有些ip不支持22端口连接,改为443连接 ssh -vT gitgithub.com // 命令执行结果 OpenSSH_for_Windows_9.5p1, LibreSSL 3.8.2 debug1: C…

智慧政务标准规范介绍:构建高效、协同的政务信息体系

在当今信息化快速发展的时代&#xff0c;智慧政务作为政府数字化转型的重要方向&#xff0c;正逐步改变着政府管理和服务的方式。为了确保智慧政务系统的建设能够有序、高效地进行&#xff0c;国家制定了一系列标准规范&#xff0c;其中GB∕T 21062系列标准《政务信息资源交换体…

77页中国金融体系指标大全(2024年版)【附全文阅读】

本文主要介绍了金融业通行宝典中国金融体系指标大全的内容&#xff0c;包括央行体系、商业银行体系、非银金融机构与地方金融组织的各项指标。文章详细分析了美联储资产负債表的结构&#xff0c;并概述了美日欧等主要经济体资产负债表状况。 重点内容&#xff1a; 1. 央行体系是…

Java进阶之不可变对象:用法实例(六十八)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

一次借助ChatGPT抵御恶意攻击的经历,为个人服务器添加自动防御系统Fail2ban

title: 一次借助ChatGPT抵御恶意攻击的经历&#xff0c;为个人服务器添加自动防御系统Fail2ban tags: 个人成长 categories:杂谈 我有一台个人服务器&#xff0c;托管着自己的WordPress网站&#xff0c;也放了RustDesk这种私有化的远程桌面工具&#xff0c;最近我发现RustDesk…