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

52. N 皇后 II【 力扣(LeetCode) 】

文章目录

  • 零、原题链接
  • 一、题目描述
  • 二、测试用例
  • 三、解题思路
  • 四、参考代码

零、原题链接


52. N 皇后 II

一、题目描述

  n 皇后问题 研究的是如何将 n 个皇后放置在 n × n 的棋盘上,并且使皇后彼此之间不能相互攻击。【补充:不能互相攻击就是要求一个皇后的同行、同列、同斜线都不能存在其他皇后】

  给你一个整数 n ,返回 n 皇后问题 不同的解决方案的数量。

二、测试用例

示例 1:

输入:n = 4
输出:2
解释:如上图所示,4 皇后问题存在两个不同的解法。

示例 2:

输入:n = 1
输出:1

提示:

1 <= n <= 9

三、解题思路

  1. 基本思路:
      回溯+剪枝
  2. 具体思路:
    • 每一行必定唯一存在一个皇后,所以确定皇后位置只要同一行确定即可【剪枝】
    • 每行尝试放置皇后,放置成功则将同列,同斜线的值++【因为是一行一行来放置皇后,所以可以设置值时可以不用设置当前行上面的】
    • 如果放置失败,则恢复状态;

四、参考代码

时间复杂度: O ( n ! ) \Omicron(n!) O(n!)
空间复杂度: O ( n ) \Omicron(n) O(n)【递归栈的深度最高为 n】

class Solution {
public:vector<vector<int>> board = vector<vector<int>>(10, vector<int>(10, 0));int ans = 0, n;void Set(const int& x, const int& y, const int& num) {for (int i = x + 1; i < n; i++) {board[i][y] += num;}auto nx = x, ny = y;while (nx < n && ny < n) {board[nx++][ny++] += num;}nx = x, ny = y;while (nx < n && 0 <= ny) {board[nx++][ny--] += num;}}void dfs(const int& k) {if (k == n) {ans++;return;}for (int i = 0; i < n; i++) {if (board[k][i] == 0) {Set(k, i, 1);dfs(k + 1);Set(k, i, -1);}}}int totalNQueens(int n) {this->n = n;dfs(0);return ans;}
};

相关文章:

  • 涂装协作机器人:重新定义涂装工艺的智能化未来
  • Spring Cloud Eureka:微服务架构中的服务注册与发现核心组件
  • 网络安全:钓鱼邮件、虚假网站与诈骗信息的预防与应对
  • DPO 算法
  • 大模型模型推理的成本过高,如何进行量化或蒸馏优化
  • [概率论基本概念4]什么是无偏估计
  • VR线上展厅特点分析与优势
  • 阿里云无影云桌面深度测评
  • centos挂载目录满但实际未满引发系统宕机
  • 婚恋小程序直播系统框架搭建
  • 图解深度学习 - 激活函数和损失函数
  • 1130 - Host ‘xxx.x.xx.xxx‘is not allowed to connect to this MySQL server
  • 【JAVA版】意象CRM客户关系管理系统+uniapp全开源
  • 一、核心概念深入解析
  • 使用seaborn/matplotlib定制好看的confusion matrix
  • linux安全加固(非常详细)
  • 产品更新丨谷云科技ETLCloud 3.9.3 版本发布
  • Redis中的fork操作
  • Linux 软件安装方式全解(适用于 CentOS/RHEL 系统)
  • 解决 idea提示`SQL dialect is not configured` 问题
  • 哪家成都公司做网站/查域名网站
  • 做2手车网站需要多少钱/怎么创建个人网站
  • 水果商城网站模板/百度app免费下载安装
  • 网站建设费用申请/网站快速排名推荐
  • 网站字体怎么设置/seo 首页
  • 模板网站有什么不好/it培训机构排名及学费