LeetCode 51. N皇后
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皇后相关推荐
- 日拱一卒——LeetCode 51.N皇后
大家好呀,今天是今天为大家带来的LeetCode的题目是LeetCode 51.N皇后问题,算是一道很经典的题目,也是一道难度不低的题目,但是只要我们掌握并理解了判断的逻辑,并且在代码编写上进行注 ...
- Leetcode.51. N 皇后
Leetcode.51. N 皇后 难度:hard 好久没有过hard题目了,还是很开心! 本题的难点在于如何对一个二维数组进行回溯,我们的思路是以chessBoard的行hang为树的每一层,每次递 ...
- LeetCode 51. N 皇后、52. N 皇后 II
51. N 皇后 n皇后问题要求皇后放置后,同一行,同一列,同一斜线上不存在其他的皇后即可 采用回溯法解决该问题 同时应该设置一个函数判断当该位置放置皇后后,是否合法 因为是采用回溯法放置皇后,每行只 ...
- LeetCode 51. N皇后 / 52. N皇后 II(回溯)
1. 题目 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后问题的解决方案 ...
- leetcode 51. N 皇后
题目链接 与52类似,建议先做52 和52题不同的是,多了一个一维数组board保存每个皇后的列的位置,这样方便后续的读取. 在leetcode中 函数返回值为List<List> 但是我 ...
- 2022-3-31 Leetcode 51.N皇后
class Solution {public:vector<vector<string>> res; //记录所有符合答案vector<string> temp; ...
- LeetCode——51. N 皇后
一.题目 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子. n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 给你一个整数 ...
- Leetcode 51. N 皇后 (每日一题 20211008)
n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击.给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案.每一种解法包含一个不同的 n 皇后问题 ...
- leetcode 51. N 皇后 思考分析
目录 题目 思考 AC代码 题目 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 思考 首先以N=4为例,画出解空间树的一部分: 根据模板: void ...
最新文章
- OpenCV图像序列生成视频,MATLAB图像生成avi视频,image2video。
- pyhton 把文字放入图片里_藏在京城老字号里的六道功夫菜!久违了!!
- hive脚本执行方式
- 浏览器滚动条 --- 自定义“衣裳”
- Codeforces Round #413 C-Fountains 树状数组
- python 自动发邮件 Errno61 Connection refused
- Web前端JavaScript笔记(7)ECMA6新增数组方法
- input默认提示取消
- layui表格取消横向滚动条_layui表格固定表头统一处理方案
- 我对敏捷价值观和原则的理解 --待续
- 95后妈妈8成是全职,爸爸去哪了?
- 如何找出电脑里的流氓软件_可怕:正版的流氓软件,100个人的电脑里99台都安装了...
- Unity显示FPS帧率
- 签租房电子合同必须留意什么地方?
- 从头到尾彻底解析Hash 表算法
- 现在做Android开发有前途吗?Android面试题及解析
- 爬虫工具在就业市场的受欢迎程度
- xb8886a规格书_拆解报告:Baseus倍思Bipow 10000mAh USB PD快充移动电源N1PD
- python时间序列分解STL
- 内部环境--SWOT分析法