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

Leetcode 51 N Queens

题意:给定一个数字 n n n,形成n*n的棋盘,棋盘上放n个皇后,确保皇后之间不会相互吃(皇后可以直线吃,斜线吃)

https://leetcode.com/problems/n-queens/description/

题解:首先这是一道dfs,枚举所有可以放n皇后的地方。构造一个数组pos, p o s [ i ] pos[i] pos[i]代表在第i行第j列放一个皇后。当数组满足长度要求时dfs结束。传入参数u表示当前我需要在第u行加入一个皇后,遍历所有n列,判断我皇后是否可以放入,如果可以放,那么就放,进入下一层dfs

class Solution {
public:vector<vector<string>> res; vector<vector<string>> solveNQueens(int n) {//pos保证所有的n queens不可能在同一行,所以循环中只需要check//是不是同一列或者斜对角就可以vector<int> pos;dfs(0, pos, n);return res;}void dfs(int u, vector<int>& pos, int n) {if( u == n ) {vector<string> str(n, string(n, '.'));for(int i = 0; i < n; i++) {str[i][pos[i]] = 'Q';}res.push_back(str);return;}for(int i = 0; i < n; i++) {if(isValid(pos,u, i)) {pos.push_back(i);dfs(u+1, pos, n);pos.pop_back();}}}bool isValid(vector<int>& pos, int row, int col) {int m = pos.size();for(int i = 0; i < m; i++) {int preRow = i;int preCol = pos[i];if(col == preCol) return false;if(abs(row-preRow) == abs(col - preCol)) return false;}return true;}};

时间复杂度: O ( N 2 ∗ N ! ) O(N^2* N!) O(N2N!)
空间复杂度: O ( N ) O(N) O(N)


http://www.mrgr.cn/news/77942.html

相关文章:

  • 基本功能实现
  • 解决 Android 单元测试 No tests found for given includes:
  • 02向量与矩阵方程
  • 高度统一:极大和极小如何统于一
  • 艾体宝干货丨差异解读:IT 和 OT 网络的数据包和网络分析
  • Edge浏览器保留数据,无损降级退回老版本+禁止更新教程(适用于Chrome)
  • 高频面试题(含笔试高频算法整理)基本总结回顾16
  • pinia的使用
  • 【c++篇】掌握动态内存的奥妙
  • Modern Effective C++ item 15:尽可能的使用constexpr
  • 活着就好20241125
  • 禁用达梦DEM的agent
  • 大数取模 详解
  • 【数据库原理】创建与维护表,DDL数据定义语言
  • Java项目实战II基于SpringBoot的教学资料管理系统(开发文档+数据库+源码)
  • 交叉熵 vs focal loss
  • 探索 Python 任务自动化的新境界:Invoke 库揭秘
  • AJAX请求返回报错NET::ERR_CERT_DATE_INVALID
  • 内网渗透横向移动1
  • Redis设计与实现 学习笔记 第二十一章 排序
  • 【Java】Linux、Mac、Windows 安装 Oracle JDK
  • Android 常用命令和工具解析之内存相关
  • 深入解析自适应控制算法及python实现
  • 深入解析自校正控制(STC)算法及python实现
  • Flink转换算子——flatMap/map/filter/keyby/reduce综合案例
  • git使用教程