题目描述

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

即任意两个皇后都不能处于同一行、同一列或同一斜线上

给定一个整数 n,返回 n 皇后问题的所有解法。

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

例如,4皇后问题有两种解法:

[[".Q..",  // 解法 1"...Q","Q...","..Q."],["..Q.",  // 解法 2"Q...","...Q",".Q.."]
]

解题方法

public class Solution {public List<List<String>> solveNQueens(int n) {char[][] board = new char[n][n];for(int i = 0; i < n; i++)for(int j = 0; j < n; j++)board[i][j] = '.';List<List<String>> res = new ArrayList<List<String>>();dfs(board, 0, res);return res;}private void dfs(char[][] board, int colIndex, List<List<String>> res) {if(colIndex == board.length) {res.add(construct(board));return;}for(int i = 0; i < board.length; i++) {if(validate(board, i, colIndex)) {board[i][colIndex] = 'Q';dfs(board, colIndex + 1, res);board[i][colIndex] = '.';}}}private boolean validate(char[][] board, int x, int y) {for(int i = 0; i < board.length; i++) {for(int j = 0; j < y; j++) {if(board[i][j] == 'Q' && (x + j == y + i || x + y == i + j || x == i))return false;}}return true;}private List<String> construct(char[][] board) {List<String> res = new LinkedList<String>();for(int i = 0; i < board.length; i++) {String s = new String(board[i]);res.add(s);}return res;}
}

51.N皇后(N-Queens)相关推荐

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

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

  2. LeetCode回溯算法——51.N皇后问题详解

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

  3. 代码随想录算法训练营第30天 | 51. N皇后 37.解数独 332.重新安排行程 回溯篇小结

    代码随想录系列文章目录 回溯篇 - 棋盘问题 图的dfs 文章目录 代码随想录系列文章目录 51.N皇后 37.解数独 332.重新安排行程 回溯篇小结 51.N皇后 题目链接 这道题的思路是什么样的 ...

  4. 代码随想录算法训练营第30天| 332.重新安排行程 、51. N皇后 、 37. 解数独

    代码随想录算法训练营第30天| 332.重新安排行程 .51. N皇后 . 37. 解数独 332.重新安排行程 开始想的是将行程进行全排列之后,然后选出一个字典排序最小的.就也是使用的回溯的思路. ...

  5. 代码随想录算法训练营第三十天| 第七章 回溯算法:332.重新安排行程,51.N皇后,37.解数独(python)

    回溯算法总结 332.重新安排行程 讲解链接 class Solution:def __init__(self):self.res = []self.dict = defaultdict(list)d ...

  6. 代码随想录【Day 30】| 332.重新安排行程 、51. N皇后 、37. 解数独

    代码随想录[Day 30] | 332.重新安排行程 .51. N皇后 .37. 解数独 332.重新安排行程 题目链接:332.重新安排行程 卡尔文解 解题思路及注意事项: 代码实现: 51. N皇 ...

  7. Leetcode.51. N 皇后

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

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

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

  9. 代码随想录刷题|LeetCode 332.重新安排行程 51. N皇后 37. 解数独

    目录 332.重新安排行程 思路 重新安排行程 51. N皇后 思路 N皇后 37. 解数独 思路 解数独         这三道题目都是困难题目,都是根据代码随想录的思路总结书写,慢慢理解,慢慢熟练 ...

  10. 算法训练day24 | php | 332.重新安排行程 , 51. N皇后 , 37. 解数独 ,总结

    一.力扣题332. 重新安排行程 给你一份航线列表 tickets ,其中 tickets[i] = [fromi, toi] 表示飞机出发和降落的机场地点.请你对该行程进行重新规划排序. 所有这些机 ...

最新文章

  1. 国拨经费约31.48亿!科技部发布科技创新2030 —“脑科学与类脑研究”重大项目2021年度项目申报指南...
  2. PyTorch模型量化工具学习
  3. 广告贴——希望大家有空能够参加11月27日的《葵花宝典——WPF自学手册》签名售书活动...
  4. zsh 隐藏用户名和主机
  5. mysql写入监控_zabbix 自定义key 监控mysql增删查改
  6. 地图统计_庄园地图“出镜率”排名,500场数据统计,红教堂第一
  7. 用 .NET 3.5 创建 ToJSON() 扩展方法
  8. api商品分享源码_SSM框架高并发和商品秒杀项目高并发秒杀API源码免费分享
  9. JMeter如何和Charles进行接口测试
  10. oracle 删除用户和依赖,Oracle 12.2使用手动创建与注册依赖对象来执行联机重定义...
  11. 部署KMS激活后用户端一些情况的确认
  12. 微信公众平台开发,图文回复、access_token生成调用、以及微信SDK的实现(2)
  13. 兔子会死怎么办? 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,假如兔子会死
  14. mysql 5.6 免安装版_mysql 5.6.15的免安装版 安装
  15. 惠普暗影精灵Plus 3代 (OMEN 17-an014TX)参数
  16. 通信工程师传输与接入ATM网络组成和接口
  17. 用数据说话,看中国49个地方(省、市、高新区)集成电路产业实力情况
  18. MySQL数据库查看时区
  19. 163邮箱怎么设置签名?商务邮箱哪些正规?163邮箱个人怎么用?
  20. 踏上自媒体之路,分享必备技能心得

热门文章

  1. 解锁三星bl锁有几种方法_手机ROOT之前的必备工作三星Bootloader解锁教程
  2. 重庆智能停车场的无线wifi网络覆盖解决方案
  3. RecyclerView的万能分割线
  4. 【微信早安定时推送消息】微信公众号定时推送早安消息 带天气、纪念日、生日、定时推送等(完整代码)
  5. 项目管理经理人如何提高向上管理的指数
  6. 蓝桥杯单片机——数码管的动态显示(4)
  7. PHP苹果支付以及事件通知-周期订阅实现
  8. 使用OGG/Kettle实现Oracle到MySQL数据平滑迁移
  9. Spring,搭建Spring环境
  10. 《脚本》Scapy刺探星巴克无线网,记录顾客信息