leetcode 51. N 皇后
题目链接
与52类似,建议先做52
和52题不同的是,多了一个一维数组board保存每个皇后的列的位置,这样方便后续的读取。
在leetcode中 函数返回值为List<List> 但是我们可以这样定义 List<List> solutions = new ArrayList<>();
class Solution {int N = 0 ;int[] board = null;HashSet<Integer> diagonalLeft = new HashSet(), diagonalRight = new HashSet(), columns = new HashSet();List<List<String>> solutions = new ArrayList<>();boolean isFeasible(int row, int col) {if (columns.contains(col))return false;int sum = col + row, div = col - row;if (diagonalLeft.contains(sum) || diagonalRight.contains(div))return false;columns.add(col);diagonalLeft.add(sum);diagonalRight.add(div);return true;}//n是几就放到第n-1行void Queen(int n) {if (n > N) {ArrayList<String> subSolution = new ArrayList<>();for (int i = 0; i < N; i++) {StringBuffer sb = new StringBuffer();for (int j = 0; j < N; j++) {if (j == board[i])sb.append("Q");elsesb.append(".");}String tmp = new String(sb.toString());subSolution.add(tmp);}solutions.add(subSolution);} else {for (int i = 0; i < N; i++) {if (isFeasible(n - 1, i)) {board[n - 1] = i;//第n-1个棋子放到了第i列Queen(n + 1);columns.remove(i);diagonalLeft.remove(n - 1 + i);diagonalRight.remove(i - n + 1);}}}}public List<List<String>> solveNQueens(int n) {board = new int[n];N = n;Queen(1);return solutions;}
}
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 皇后问题的解决方案 ...
- 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皇后
https://leetcode-cn.com/problems/n-queens/ 难度:困难 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 ...
最新文章
- C语言--static修饰函数
- 居然又要出一部关于程序员的剧!你会追么?
- awk和cut分割字符区别
- 二柱子四则运算2.0版本
- 双重for_测试双重图案
- JDK 11:轻松取出单文件Java源代码程序
- 重温2 在Activity中使用Menu
- 成语json_人工智能测试爬百度成语测成语接龙
- matlab时域转换成频域_从时域到频域,你只需要旋转一下!
- linux wc read,Linux 下使用 wc 统计文件夹下所有文件的代码行数(包括子目录)-Go语言中文社区...
- R语言高级算法之支持向量机(Support Vector Machine)
- python获取磁盘剩余空间的方法
- 自动驾驶_感知_分割_车道线检测
- openrasp-iast 灰盒扫描工具
- 厦门大学计算机系研究生课程《数据科学》课程主页
- JAVA面试题集(2) (转)
- 寒江独钓 第二章 课后习题
- java 字母个数字_Java 中字母对应的数字是多少
- 静态HTML页面的参数的获取
- IE的浏览器模式和文档模式