news 2026/4/29 3:43:07

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 12:23:23

【小程序毕设全套源码+文档】基于Android的汉服交易小程序的设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/17 4:24:07

《从文档到自动化:API可信源全流程构建指南》

客户端SDK的开发往往需要手动对接接口文档&#xff0c;不同端侧的开发人员对同一文档的理解存在差异&#xff0c;导致各端SDK的接口调用逻辑、异常处理方式出现不一致&#xff0c;后续的版本维护也需要多端同步推进&#xff0c;产生大量的重复劳动。这些日常开发中反复出现的问…

作者头像 李华
网站建设 2026/4/23 17:28:08

温度、电压、外部信号采集,ADC帮你全搞定

今天&#xff0c;我们将分享Air8000系列工业引擎内置的ADC接口及其demo示例&#xff0c;带你体验简单高效的LuatOS应用开发。一、模数转换ADCADC模拟/数字转换器&#xff0c;是指将连续变量的模拟信号转换为离散的数字信号的器件。 硬件产品中的ADC接口主要用来检测模拟电压信号…

作者头像 李华
网站建设 2026/4/17 23:13:29

claude code使用技巧

一、基础操作 安装 VS Code 或 Cursor 插件 因为Claude Code是运行在终端的&#xff0c;编辑文件不太方便&#xff0c;所以你可以在IDE中&#xff08;VS Code、Cursor、JetBrains等&#xff09;中安装Claude Code插件&#xff0c;安装后可以快速启动Claude Code。实现IDE和Clau…

作者头像 李华
网站建设 2026/4/17 3:46:32

Flink ZooKeeper HA 实战原理、必配项、Kerberos、安全与稳定性调优

1. ZooKeeper 在 Flink HA 里负责什么 Flink 借助 ZooKeeper 在多个 JobManager 之间做分布式协调&#xff0c;核心包含三类能力&#xff1a; Leader election&#xff1a;在多个 JobManager 候选者里选出唯一 LeaderService discovery&#xff1a;让组件能找到“当前 Leader 的…

作者头像 李华