题目链接

与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 皇后相关推荐

  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. 2022-3-31 Leetcode 51.N皇后

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

  6. LeetCode——51. N 皇后

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

  7. LeetCode 51. N皇后

    https://leetcode-cn.com/problems/n-queens/ 难度:困难   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. C语言--static修饰函数
  2. 居然又要出一部关于程序员的剧!你会追么?
  3. awk和cut分割字符区别
  4. 二柱子四则运算2.0版本
  5. 双重for_测试双重图案
  6. JDK 11:轻松取出单文件Java源代码程序
  7. 重温2 在Activity中使用Menu
  8. 成语json_人工智能测试爬百度成语测成语接龙
  9. matlab时域转换成频域_从时域到频域,你只需要旋转一下!
  10. linux wc read,Linux 下使用 wc 统计文件夹下所有文件的代码行数(包括子目录)-Go语言中文社区...
  11. R语言高级算法之支持向量机(Support Vector Machine)
  12. python获取磁盘剩余空间的方法
  13. 自动驾驶_感知_分割_车道线检测
  14. openrasp-iast 灰盒扫描工具
  15. 厦门大学计算机系研究生课程《数据科学》课程主页
  16. JAVA面试题集(2) (转)
  17. 寒江独钓 第二章 课后习题
  18. java 字母个数字_Java 中字母对应的数字是多少
  19. 静态HTML页面的参数的获取
  20. IE的浏览器模式和文档模式

热门文章

  1. 系统找不到zlib.dll文件的解决方法。zlib编译和使用
  2. Redis实现分布式锁
  3. matlab识别中国象棋棋盘,一种基于图像处理的中国象棋识别系统及方法与流程
  4. Python 将TXT格式转换为手机通讯录格式vcf
  5. [Unity2D入门教程]简单制作仿植物大战僵尸游戏之①搭建场景
  6. 八字易经算法之用JAVA实现二十八星宿算命
  7. 实验 Linux下C工具应用
  8. 数控车床接刀螺纹切削加工
  9. 怎么写软件功能测试报告,分享详细专业的功能检测报告模板
  10. 性能测试--42性能测试报告编写专项技能