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

难度:困难


  n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

  图为 8 皇后问题的一种解法。

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

  每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 'Q''.' 分别代表了皇后和空位。

示例:

输入:4

输出:[[".Q..",  // 解法 1"...Q","Q...","..Q."],
 ["..Q.",  // 解法 2"Q...","...Q",".Q.."]
]

解释: 4 皇后问题存在两个不同的解法。

提示:

  • 皇后彼此不能相互攻击,也就是说:任何两个皇后都不能处于同一条横行、纵行或斜线上。

解法1:回溯

  对每个位置都进行尝试。

  n 行,每行从头开始遍历,对当前位置,判断这个位置是否满足皇后位置的要求,即横、纵、斜线上都没有其他皇后存在,因为我们是从头开始遍历的,因此,对当前位置只需要判断处于一条竖线的上方、处于左斜线的上方和处于右斜线的上方是否有皇后存在即可。若当前位置满足,则开始寻找下一行的皇后的位置。直到第 n 行找到最后一个皇后。

  如下图,假设遍历到 Q3 位置,它只需要判断三条蓝线的方向是否有皇后即可。

var solveNQueens = function(n) {let res = [];let board = [];for (let i = 0; i < n; i++) {board[i] = new Array(n).fill('.');}const deepCopy = () => {let arr = [];for (let i = 0; i < n; i++) {arr[i] = [];for (let j = 0; j < n; j++) {arr[i][j] = board[i][j];}}return arr;};const dirs = [[-1, 0], [-1, 1], [-1, -1]];  // 只需要查找 上方的、斜左上方的 和 斜右上方的 方向是否有 Q 即可const helper = (row) => {if (row === n) {res.push(deepCopy());}for (let i = 0; i < n; i++) {let flag = true;for (let dir of dirs) {let r = row + dir[0], c = i + dir[1];while(r >= 0 && r < n && c >= 0 && c < n) {if (board[r][c] === 'Q') {flag = false;break;}r += dir[0], c += dir[1];}if (!flag) {break;}}if (flag) {board[row][i] = 'Q';helper(row+1);board[row][i] = '.';}}};helper(0);for (let i = 0; i < res.length; i++) {for (let j = 0; j < n; j++) {res[i][j] = res[i][j].join('');}}return res;
};

LeetCode 51. N皇后相关推荐

  1. 日拱一卒——LeetCode 51.N皇后

    ​ 大家好呀,今天是今天为大家带来的LeetCode的题目是LeetCode 51.N皇后问题,算是一道很经典的题目,也是一道难度不低的题目,但是只要我们掌握并理解了判断的逻辑,并且在代码编写上进行注 ...

  2. Leetcode.51. N 皇后

    Leetcode.51. N 皇后 难度:hard 好久没有过hard题目了,还是很开心! 本题的难点在于如何对一个二维数组进行回溯,我们的思路是以chessBoard的行hang为树的每一层,每次递 ...

  3. LeetCode 51. N 皇后、52. N 皇后 II

    51. N 皇后 n皇后问题要求皇后放置后,同一行,同一列,同一斜线上不存在其他的皇后即可 采用回溯法解决该问题 同时应该设置一个函数判断当该位置放置皇后后,是否合法 因为是采用回溯法放置皇后,每行只 ...

  4. LeetCode 51. N皇后 / 52. N皇后 II(回溯)

    1. 题目 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后问题的解决方案 ...

  5. leetcode 51. N 皇后

    题目链接 与52类似,建议先做52 和52题不同的是,多了一个一维数组board保存每个皇后的列的位置,这样方便后续的读取. 在leetcode中 函数返回值为List<List> 但是我 ...

  6. 2022-3-31 Leetcode 51.N皇后

    class Solution {public:vector<vector<string>> res; //记录所有符合答案vector<string> temp; ...

  7. LeetCode——51. N 皇后

    一.题目 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子. n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 给你一个整数 ...

  8. Leetcode 51. N 皇后 (每日一题 20211008)

    n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击.给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案.每一种解法包含一个不同的 n 皇后问题 ...

  9. leetcode 51. N 皇后 思考分析

    目录 题目 思考 AC代码 题目 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 思考 首先以N=4为例,画出解空间树的一部分: 根据模板: void ...

最新文章

  1. OpenCV图像序列生成视频,MATLAB图像生成avi视频,image2video。
  2. pyhton 把文字放入图片里_藏在京城老字号里的六道功夫菜!久违了!!
  3. hive脚本执行方式
  4. 浏览器滚动条 --- 自定义“衣裳”
  5. Codeforces Round #413 C-Fountains 树状数组
  6. python 自动发邮件 Errno61 Connection refused
  7. Web前端JavaScript笔记(7)ECMA6新增数组方法
  8. input默认提示取消
  9. layui表格取消横向滚动条_layui表格固定表头统一处理方案
  10. 我对敏捷价值观和原则的理解 --待续
  11. 95后妈妈8成是全职,爸爸去哪了?
  12. 如何找出电脑里的流氓软件_可怕:正版的流氓软件,100个人的电脑里99台都安装了...
  13. Unity显示FPS帧率
  14. 签租房电子合同必须留意什么地方?
  15. 从头到尾彻底解析Hash 表算法
  16. 现在做Android开发有前途吗?Android面试题及解析
  17. 爬虫工具在就业市场的受欢迎程度
  18. xb8886a规格书_拆解报告:Baseus倍思Bipow 10000mAh USB PD快充移动电源N1PD
  19. python时间序列分解STL
  20. 内部环境--SWOT分析法

热门文章

  1. NFS基本配置与NFS客户端自动挂载
  2. DNS Serv管理与维护
  3. openSUSE11.1 用Yast安装virtualbox 2.06
  4. 接口级故障的应对方法
  5. 从刚入职阿里的学弟那里薅来的面试题,速速领取~~~
  6. 隔壁组Leader降级了!从不pua,亲自写代码,自己加班也不让下属加班!
  7. 年后准备跳槽可以看看
  8. 干掉 Postman?测试接口直接生成API文档,这个工具我爱了
  9. 都说百度前端牛,来看看百度前端工程化之H5性能优化
  10. 一文带你玩转设计模式之「责任链」