​题目

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

分析

力扣界面改成蓝色基色,​给人感觉很清新,赞一个。

这道题比N皇后I要容易一些,是一道典型的深度优先算法题,解题思路是一模一样的。

N皇后的关键我认为不是dfs+回溯,而是怎么判断斜线上已经存在皇后了,直线很容易判断,用一个boolean[n]数组缓存就行了,但斜线呢?

往左上的斜线的特点是坐标值相减,如p(x,y) 那它的坐标差值等于x-y,它所在的往左上斜线的点坐标差值都等于x-y。

往右上的斜线的特点是坐标值相加,如p(x,y) 那它的坐标差值等于x+y,它所在的往右上斜线的点坐标差值都等于x+y。

代码

class Solution {int res = 0;public int totalNQueens(int n) {boolean[] row = new boolean[n];boolean[] col = new boolean[n];Set<Integer> left = new HashSet<Integer>();Set<Integer> right = new HashSet<Integer>();dfs(0,n, row, col, left, right);return res;}void dfs(int i,int n,boolean[] row, boolean[] col, Set<Integer> left, Set<Integer> right) {if(i==n){res++;return;}for(int j=0;j<n;j++){if(row[i] == true || col[j] == true || left.contains(i-j) || right.contains(i+j)){continue;}row[i] = true;col[j] = true;left.add(i-j);right.add(i+j);dfs(i+1, n, row, col, left, right);row[i] = false;col[j] = false;left.remove(i-j);right.remove(i+j);}}
}

结果

关注个人微信公众号:肌肉码农,回复“好友”讨论问题

LeetCode每日一题-N皇后 II相关推荐

  1. leetcode每日一题--前缀树;前缀哈希;深搜;面试题 08.04. 幂集;648. 单词替换面试题 01.09. 字符串轮转;剑指 Offer II 062. 实现前缀树

    leetcode每日一题 ps:今天的每日一题没意思,简单的模拟,自己换一道 面试题 08.04. 幂集 幂集.编写一种方法,返回某集合的所有子集.集合中不包含重复的元素. 说明:解集不能包含重复的子 ...

  2. leetcode每日一题·买卖股票问题(Python)

    leetcode每日一题·买卖股票问题(Python) 买卖股票的最佳时机(股票最大利润) 题目链接 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的 ...

  3. leetcode每日刷题计划-简单篇day8

    leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...

  4. Leetcode每日一题:171.excel-sheet-column-number(Excel表列序号)

    思路:就是168题的反命题,进制的方式完美解决: Leetcode每日一题:168.excel-sheet-column-title(Excel表名称) class Solution {public: ...

  5. 【LeetCode每日一题】1723. 完成所有工作的最短时间

    [LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...

  6. leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用

    leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...

  7. LeetCode每日一题——1812. 判断国际象棋棋盘中一个格子的颜色

    LeetCode每日一题系列 题目:1812. 判断国际象棋棋盘中一个格子的颜色 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个坐标 coordinates ...

  8. 【LeetCode每日一题】——109.有序链表转换二叉搜索树

    文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[题目提示] 七[解题思路] 八[时间频度] 九[代码实现] 十[提交结果] 一[题目类别] 二叉树 二[题 ...

  9. leetcode每日一题·救生艇问题(Python)

    leetcode每日一题·救生艇问题(Python) 问题描述 题目入口 题目思路 首先分析问题,一个船最多坐两人,因此我们可以把这个问题看作两两组合的问题,并且如果最重的那个人和最轻的人加起来大于l ...

最新文章

  1. PHP随机字符串生成器
  2. C#游戏开发快速入门2.2改变游戏对象的状态
  3. 页面生命周期:DOMContentLoaded, load, beforeunload, unload
  4. 剑指offer之二叉树的高度
  5. qchart折现图_Qt开发技术:QCharts(二)QCharts折线图介绍、Demo以及代码详解
  6. nioqrc oracle,程序停在 readnocancel () from -lib-tls-libpthread.so.0
  7. Java-keepalived
  8. opc怎么在计算机上测试,OPC测试
  9. Excel Txt 字符集设置
  10. 数据库查询前十名和当前信息的排名信息
  11. 软著申请流程与方法详解
  12. PHP更换网页背景,更换网页的背景图
  13. UEFI Protocol使用
  14. 一步一步的手写Promise
  15. IDEA中Git暂存代码暂存区的使用
  16. 神经网络中的偏置值什么意思
  17. 马云说:“未来是大数据的时代”
  18. 数组中元素旋转移位的三种实现方法 --By LXW
  19. Python学习,类空间问题及类之间的关系
  20. “Windows 无法访问指定设备、路径或文件。你可能没有适当的权限访问该项目。”解决办法

热门文章

  1. Java调用打印机读写文件
  2. BitTorrent協議規範(转自維基百科)
  3. eas 在linux下安装_eas服务器安装
  4. 计算机弹歌曲学猫叫,学猫叫在线试听_小潘潘_高音质歌曲_九酷音乐
  5. 关于《【校园招聘】被南瑞集团坑了。。。》的补充说明和思考20121128
  6. 从郭美美霸气侧漏看项目管理之项目经理防身术
  7. 使用git reset回退版本
  8. iMeta | 浙大吴顶峰和同济刘蕾等对微生物富集分析中Reporter Score的误用研究
  9. Vue.use 写多个_收藏!如何写好SCI论文里的主题句,助你SCI写作事半功倍!
  10. 浅谈 qmake 之 pro、pri、prf、prl文件