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

day79(2.7)——leetcode面试经典150

52. N 皇后 II

52. N皇后Ⅱ

我以前写这题的时候就没搞明白,她是怎么计算两边的对角线的,然后我今天自己推了一下,但是我是横竖进行遍历,传的参数是放了几个皇后,导致不仅时间复杂度很高,而且还可能导致一行里面有多个皇后,还导致搜索空间爆炸,所以应该采用dfs传入行数这一个参数,然后遍历每列的每一个

N 皇后问题有一个隐含但必须遵守的约束

每行只能放一个皇后

void dfs(int x, int y, int t) { for (int i = x; i < w; i++) { for (int j = y; j < w; j++) { // 尝试在 (i,j) 放皇后 } } }

会导致:

  1. 同一行可能放多个皇后
    • 比如先在(0,0)放一个,回溯后又在(0,1)放一个 → 违反规则!
  2. 大量重复解
    • 皇后顺序不同但位置相同(如先放 (0,0) 再放 (1,1),或先放 (1,1) 再放 (0,0))会被算作两个解
  3. 搜索空间爆炸
    • 你是在所有格子中“任意选 k 个不冲突的位置”,而不是“每行选一个”

✅ 正确策略:按行递归,每行只放一个皇后

标准做法是:

  • t层 DFS 处理第t
  • 在该行尝试每一列j
  • 这样天然保证每行一个皇后,且不会重复计数

题目:

题解:

class Solution { int w; //竖 boolean[] col; //左对角线——x+y boolean[] left; //右对角线——w-1+y-x boolean[] right; int res; //以行数为参数 void dfs(int row) { if(row==w) { res++; return; } for(int j=0;j<w;j++) { if(col[j]==false&&left[row+j]==false&&right[w-1+j-row]==false) { //放皇后 col[j]=true; left[row+j]=true; right[w-1+j-row]=true; dfs(row+1); //恢复现场 col[j]=false; left[row+j]=false; right[w-1+j-row]=false; } } } public int totalNQueens(int n) { w = n; col = new boolean[n]; left = new boolean[2*n]; right = new boolean[2*n]; res = 0; dfs(0); return res; } }
http://www.jsqmd.com/news/355976/

相关文章:

  • 数据库多表
  • 高压纹波加热电源硬核解析!EA-RW600 赋能汽车高压部件检测
  • 【小程序毕设源码分享】基于springboot+小程序的海产品加工销售一体化管理系统小程序的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 第十五课 · 实战篇:缓存三大灾难落地防御(穿透/击穿/雪崩)
  • Go 如何避免频繁抢占?
  • 2026上海陵园标杆推荐:传统中式墓、双朝南墓、草坪葬、花坛葬、树葬、壁葬、16万墓,瀛新园以多元生态葬式,守护生命与自然共生 - 海棠依旧大
  • 2026年上海公墓行业优质机构参考:至尊园传统中式墓、至尊园双朝南墓、至尊园草坪葬、至尊园花坛葬、至尊园树葬、至尊园壁葬、至尊园16万墓、传承人文的生命纪念场所 - 海棠依旧大
  • 2026上海墓地服务推荐:草坪葬墓地、花坛葬墓地、树葬墓地、壁葬墓地、16万墓地优选指南,望仙安息园公墓以多元墓式筑就逝者安心之所 - 海棠依旧大
  • 第十五课:缓存三大灾难——穿透、击穿、雪崩的系统解法
  • 第五章 part01
  • 2026上海公墓推荐:汇龙园墓园、传统中式墓、双朝南墓、左右放墓、艺术墓、草坪葬、花坛葬、树葬、壁葬、16万墓、生态葬,殡葬服务优选 - 海棠依旧大
  • 从 SAS 到 MAS:构建高效、可扩展的 AI Agent 架构演进
  • 探索大数据领域 Hadoop 的分布式存储奥秘
  • FPGA信息交互的奇妙之旅:PCle与光纤协同工作探秘
  • BISHI19 乒乓球
  • 2026年上海福寿园公墓参考:福寿园墓地、福寿园墓园、福寿园传统中式墓、福寿园双朝南墓、福寿园草坪葬、福寿园花坛葬、福寿园树葬、福寿园壁葬、福寿园16万墓、人文纪念与生态安葬的践行者 - 海棠依旧大
  • 获取类的内容
  • 2026年上海公墓优质机构参考:上海清竹园、清竹园传统中式墓、清竹园双朝南墓、清竹园草坪葬、清竹园花坛葬、清竹园树葬、清竹园壁葬、清竹园16万墓、兼具人文底蕴与生态质感 - 海棠依旧大
  • 解析大数据领域存算分离的市场需求
  • 【小程序毕设全套源码+文档】基于Android的高校社团管理小程序的设计与实现(丰富项目+远程调试+讲解+定制)
  • 通过docker搭建windows的KMS激活工具
  • 【小程序毕设源码分享】基于springboot+Android的成人教育APP的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 细胞多尺度仿真软件:MCell_(4).MCell的用户界面与基本操作
  • 【小程序毕设源码分享】基于springboot+Android宠物饲养管理APP的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 细胞多尺度仿真软件:CellSys_(10).模型验证与优化
  • 从巴菲特投资看A股投资机会
  • 【小程序毕设源码分享】基于springboot+小程序的电影信息推荐APP的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 浏览器编译后有2个图标-----没用
  • 【小程序毕设源码分享】基于springboot+Android的大学生勤工助学管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • Flutter 混合开发:WebView 与原生完美融合实战