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

hot100 n皇后(51)

算法核心回溯法深度优先搜索 DFS 剪枝时间复杂度O(n² · n!)回溯搜索树中至多有 O(n!) 个叶子节点。当递归到达叶子节点并满足终止条件时生成最终棋盘答案构建 n 个长度为 n 的字符串需要O(n²)的时间。因此严格的上界为 O(n² · n!)实际表现由于剪枝逻辑的存在实际搜索树的叶子节点数远没有这么多。例如当 n 9 时最终只有 352 种有效放置方案远远小于 9! 362,880。更准确的方案数渐进规律可参考OEIS A000170其规模约为O(n! / 2.54ⁿ)空间复杂度O(n)。在不计入返回值输出列表占用空间的情况下递归调用栈的最大深度为 n且辅助状态数组col, diag1, diag2的空间开销均为 O(n) 级别。class Solution { public ListListString solveNQueens(int n) { ListListString ans new ArrayList(); int[] queens new int[n]; // 记录第 r 行的皇后放置在第几列 boolean[] col new boolean[n]; // 列冲突标记 boolean[] diag1 new boolean[2 * n - 1]; // 副对角线冲突标记 (r c) boolean[] diag2 new boolean[2 * n - 1]; // 主对角线冲突标记 (r - c n - 1) dfs(ans, queens, col, diag1, diag2, 0); return ans; } private void dfs(ListListString ans, int[] queens, boolean[] col, boolean[] diag1, boolean[] diag2, int r) { int n col.length; // 终止条件成功放置了 n 个皇后开始生成当前解的棋盘画卷 if (r n) { ListString path new ArrayList(); for (int c : queens) { char[] row new char[n]; Arrays.fill(row, .); row[c] Q; path.add(new String(row)); } ans.add(path); return; } // 尝试在当前行 r 的第 c 列放置皇后 for (int c 0; c n; c) { int rc r - c n - 1; // 主对角线映射索引 // 剪枝条件判断列、两条对角线是否存在冲突 if (!col[c] !diag1[r c] !diag2[rc]) { // 1. 做出选择放置皇后并标记状态 queens[r] c; col[c] diag1[r c] diag2[rc] true; // 2. 递归进入下一行 dfs(ans, queens, col, diag1, diag2, r 1); // 3. 撤销选择回溯恢复状态 col[c] diag1[r c] diag2[rc] false; } } } }1.有硬性要求 每行每列只能放一个皇后因为在同一个/斜线上面 x y的坐标为一个定值在同一个\斜线上面 x - y的值为一个定值所以说可以利用这个性质来进行判断2.int[] queens new int[n]; // 皇后放在 (r,queens[r])queens[2] 3 代表(2, 3) 有一个皇后3.boolean[] diag1 new boolean[n * 2 - 1]; boolean[] diag2 new boolean[n * 2 - 1];这是代表左斜线和右斜线在n * n的矩阵中 单个方向一共有2 * n - 1条斜线
http://www.zskr.cn/news/1346713.html

相关文章:

  • 初次使用Taotoken的体验,从模型广场选型到发出第一个请求
  • 如何实现《塞尔达传说:旷野之息》Switch与WiiU存档互通:BotW Save Manager终极指南
  • Kali Linux Web渗透测试实战:从工具使用到攻击思维跃迁
  • Netty 第三篇:NioEventLoopGroup 是如何初始化的
  • Python AUTOSAR XML生成:从概念到实战的完整指南
  • 如何用开源工具构建你的Steam饰品交易雷达:告别盲目交易的新选择
  • NHSE存档编辑器深度解析:如何安全高效地修改动物森友会游戏数据
  • TiDB压测避坑指南:JMeter配置、SQL设计与分布式指标归因
  • 知网AI率稳降10%内?2026年5月4款降AI工具实测推荐 - 仙仙学姐测评
  • 2026 东莞黄金变现攻略|正规回收机构测评与避坑技巧 - 奢侈品回收测评
  • 小程序加密流量破解:CE内存定钥+Burp Galaxy自动化加解密
  • 中医AI革命:如何用1.8B参数模型实现专业中医诊疗助手
  • 3DS Pokémon ROM 编辑器 pk3DS:新手入门完全指南
  • ElevenLabs方言适配避坑清单,深度解析TTS模型对平仄调值的误判机制,附广西话声调映射表
  • BotW Save Manager:打破平台壁垒的《塞尔达传说:旷野之息》存档转换神器
  • 深度解析OBS Mac虚拟摄像头插件的架构设计与性能优化
  • 泉盛UV-K5/K6开源固件改造:从百元对讲机到专业无线电设备的终极进化指南
  • Unity半透明模型单面显示问题的四大解决方案
  • 突破macOS与Android文件传输瓶颈:OpenMTP的完整用户指南 [特殊字符]
  • 终极指南:5分钟掌握免费AI图像放大神器Upscayl
  • 北航毕业论文LaTeX模板:终极排版解决方案,告别格式烦恼
  • 泰州泰兴靖江奢侈品二手名表回收攻略|二手表回收价格行情解析 正规门店推荐 - 博客湾
  • ADI DSP开发中很重要的一个知识点:LDF,也就是内存分配(5)
  • FSearch:Linux系统必备的极速文件搜索神器,3秒找到任何文件!
  • MySQL报错注入实战:5次请求精准获取数据库信息
  • 从600万到5000万,人员几乎没增加——一家CRO企业的项目成本管理进化史
  • 2026青岛爱马仕回收,合扬Birkin Kelly保值款优先收 - 李宏哲1
  • FreeMove:Windows系统磁盘空间终极优化方案,轻松释放C盘数十GB空间
  • 苏州黄金回收 5.22 硬核测评,3 家靠谱门店,计价全程透明 - 速递信息
  • 如何快速修复损坏的QR码:QrazyBox终极指南