leetcode第51题

简介: 较经典的回溯问题了,我们需要做的就是先在第一行放一个皇后,然后进入回溯,放下一行皇后的位置,一直走下去,如果已经放的皇后的数目等于 n 了,就加到最后的结果中。然后再回到上一行,变化皇后的位置,然后去找其他的解。期间如果遇到当前行所有的位置都不能放皇后了,就再回到上一行,然后变化皇后的位置。再返回到下一行。说起来可能还费力些,直接看代码吧。

image.png

经典的 N 皇后问题。意思就是摆皇后的位置,每行每列以及对角线只能出现 1 个皇后。输出所有的情况。

解法一 回溯法

比较经典的回溯问题了,我们需要做的就是先在第一行放一个皇后,然后进入回溯,放下一行皇后的位置,一直走下去,如果已经放的皇后的数目等于 n 了,就加到最后的结果中。然后再回到上一行,变化皇后的位置,然后去找其他的解。

期间如果遇到当前行所有的位置都不能放皇后了,就再回到上一行,然后变化皇后的位置。再返回到下一行。

说起来可能还费力些,直接看代码吧。

publicList<List<String>>solveNQueens(intn) {
List<List<String>>ans=newArrayList<>();
backtrack(newArrayList<Integer>(), ans, n);
returnans;
}
privatevoidbacktrack(List<Integer>currentQueen, List<List<String>>ans, intn) {
// 当前皇后的个数是否等于 n 了,等于的话就加到结果中if (currentQueen.size() ==n) {
List<String>temp=newArrayList<>();
for (inti=0; i<n; i++) {
char[] t=newchar[n];
Arrays.fill(t, '.');
t[currentQueen.get(i)] ='Q';
temp.add(newString(t));
        }
ans.add(temp);
return;
    }
//尝试每一列for (intcol=0; col<n; col++) {
//当前列是否冲突if (!currentQueen.contains(col)) {
//判断对角线是否冲突if (isDiagonalAttack(currentQueen, col)) {
continue;
            }
//将当前列的皇后加入currentQueen.add(col);
//去考虑下一行的情况backtrack(currentQueen, ans, n);
//将当前列的皇后移除,去判断下一列//进入这一步就是两种情况,下边的行走不通了回到这里或者就是已经拿到了一个解回到这里currentQueen.remove(currentQueen.size() -1);
        }
    }
}
privatebooleanisDiagonalAttack(List<Integer>currentQueen, inti) {
// TODO Auto-generated method stubintcurrent_row=currentQueen.size();
intcurrent_col=i;
//判断每一行的皇后的情况for (introw=0; row<currentQueen.size(); row++) {
//左上角的对角线和右上角的对角线,差要么相等,要么互为相反数,直接写成了绝对值if (Math.abs(current_row-row) ==Math.abs(current_col-currentQueen.get(row))) {
returntrue;
        }
    }
returnfalse;
}

时间复杂度:

空间复杂度:

上边我们只判断了列冲突和对角线冲突,至于行冲突,由于我们采取一行一行加皇后,所以一行只会有一个皇后,不会产生冲突。

最早接触的一类问题了,学回溯法的话,一般就会以这个为例,所以思路上不会遇到什么困难。

相关文章
|
人工智能 物联网 机器人
『GitHub项目圈选17』推荐5款本周 火火火 的AI开源项目
『GitHub项目圈选17』推荐5款本周 火火火 的AI开源项目
2082 1
|
4月前
|
传感器 运维 数据可视化
AR眼镜巡检系统在工业互联网的应用:AR+IoT
AR与IoT融合构建虚实闭环,IoT采集实时数据,AR直观呈现并交互,形成感知-分析-决策-行动高效闭环,提升运维效率。
|
10月前
|
存储 人工智能 Serverless
一键解锁 AI 动画视频创作,赢好礼
短视频行业的快速增长使得内容创作的速度和质量成为竞争关键。传统动画故事制作复杂且昂贵,限制了创作者对市场热点的快速反应和创新实现。本方案通过 AI 生成剧本和动画,简化创作流程并降低技术门槛,使创作者能高效生产高质量作品,迅速适应市场需求。
313 11
|
算法 Java Linux
java制作海报七:java Graphics2D 合成图片 在 linux下中文不显示,echarts图上的中文也不显示问题
这篇文章讨论了在Linux环境下使用Java Graphics2D合成图片时遇到的中文显示问题,并提供了解决方案,包括如何在Linux系统中添加中文字体库。
236 1
java制作海报七:java Graphics2D 合成图片 在 linux下中文不显示,echarts图上的中文也不显示问题
|
6月前
|
数据采集 弹性计算 供应链
阿里云服务器包年包月、按量付费和抢占式实例有什么区别?如何选择?
阿里云服务器ECS提供三种付费类型:包年包月、按量付费和抢占式实例。包年包月适合长期稳定使用,价格优惠;按量付费灵活方便,按小时结算,适用于短期或突发需求;抢占式实例价格最低(可省90%),但可能被系统释放,适合无状态应用如大数据分析、科学计算等。选择时根据业务场景决定:稳定需求选包年包月,动态需求选按量付费,低成本无状态应用选抢占式实例。
306 42
|
11月前
|
算法 搜索推荐 安全
通过算法备案之后就万事大吉了么?
在数字化时代,算法成为互联网企业的核心竞争力,但也带来了诸多风险。我国实施的算法备案制度是企业合规运营的起点,而非终点。备案后,企业还需严格遵守法规,保障用户知情权和选择权,避免个性化推送陷阱、隐私泄露、信息操纵等问题。同时,企业应加强自查自纠,完善算法管理制度,确保算法的公平性、透明性和安全性。监管部门也需加大治理力度,形成有效监管震慑,共同推动算法应用的健康发展。
|
Windows
油猴脚本(篡改猴)获取某度网盘链接
本文档介绍如何安装及使用Tampermonkey(油猴)测试版插件来增强浏览器功能,并配合aria2c下载工具实现高效下载。首先需从官方或可靠来源下载油猴测试版并确保移除原有正式版以避免冲突。接着安装aria2c至系统目录使全局可用。利用特定油猴脚本如“网盘直链下载助手”,可以将网盘文件转换为直接下载链接,再通过桌面快捷方式打开PowerShell执行aria2c下载。文档还推荐了一些实用脚本,例如“懒人工具箱”,并提供了获取链接。通过这些步骤,用户能够显著提升日常浏览体验及资源下载效率。
油猴脚本(篡改猴)获取某度网盘链接
|
存储 人工智能 运维
ChaosMeta for AI:混沌工程让AI稳定性更上一层楼
1.混沌工程不仅仅是技术过关的利器,更是AI系统完美运转的“防火墙”。ChaosMeta通过全方位、多层次的故障注入和演练,帮助AI系统在复杂多变的环境中维持高稳定性。 2.结合混沌工程的思想,我们不仅可以在开发阶段找到和修复问题,还能在运维阶段持续提升系统的鲁棒性。在这个高速发展的AI年代,ChaosMeta将为AI系统提供稳定性保障,让AI系统走得更远、更稳。 3.抽空试试ChaosMeta,也许下一个故障发生时,你会发现,原来一切尽在掌握。
897 0
ChaosMeta for AI:混沌工程让AI稳定性更上一层楼
|
分布式计算 API 云计算
|
缓存 前端开发 JavaScript
Spring Boot中如何处理静态资源
Spring Boot中如何处理静态资源