LeetCode每日一题-N皇后 II
题目
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相关推荐
- leetcode每日一题--前缀树;前缀哈希;深搜;面试题 08.04. 幂集;648. 单词替换面试题 01.09. 字符串轮转;剑指 Offer II 062. 实现前缀树
leetcode每日一题 ps:今天的每日一题没意思,简单的模拟,自己换一道 面试题 08.04. 幂集 幂集.编写一种方法,返回某集合的所有子集.集合中不包含重复的元素. 说明:解集不能包含重复的子 ...
- leetcode每日一题·买卖股票问题(Python)
leetcode每日一题·买卖股票问题(Python) 买卖股票的最佳时机(股票最大利润) 题目链接 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的 ...
- leetcode每日刷题计划-简单篇day8
leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...
- Leetcode每日一题:171.excel-sheet-column-number(Excel表列序号)
思路:就是168题的反命题,进制的方式完美解决: Leetcode每日一题:168.excel-sheet-column-title(Excel表名称) class Solution {public: ...
- 【LeetCode每日一题】1723. 完成所有工作的最短时间
[LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...
- leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用
leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...
- LeetCode每日一题——1812. 判断国际象棋棋盘中一个格子的颜色
LeetCode每日一题系列 题目:1812. 判断国际象棋棋盘中一个格子的颜色 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个坐标 coordinates ...
- 【LeetCode每日一题】——109.有序链表转换二叉搜索树
文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[题目提示] 七[解题思路] 八[时间频度] 九[代码实现] 十[提交结果] 一[题目类别] 二叉树 二[题 ...
- leetcode每日一题·救生艇问题(Python)
leetcode每日一题·救生艇问题(Python) 问题描述 题目入口 题目思路 首先分析问题,一个船最多坐两人,因此我们可以把这个问题看作两两组合的问题,并且如果最重的那个人和最轻的人加起来大于l ...
最新文章
- PHP随机字符串生成器
- C#游戏开发快速入门2.2改变游戏对象的状态
- 页面生命周期:DOMContentLoaded, load, beforeunload, unload
- 剑指offer之二叉树的高度
- qchart折现图_Qt开发技术:QCharts(二)QCharts折线图介绍、Demo以及代码详解
- nioqrc oracle,程序停在 readnocancel () from -lib-tls-libpthread.so.0
- Java-keepalived
- opc怎么在计算机上测试,OPC测试
- Excel Txt 字符集设置
- 数据库查询前十名和当前信息的排名信息
- 软著申请流程与方法详解
- PHP更换网页背景,更换网页的背景图
- UEFI Protocol使用
- 一步一步的手写Promise
- IDEA中Git暂存代码暂存区的使用
- 神经网络中的偏置值什么意思
- 马云说:“未来是大数据的时代”
- 数组中元素旋转移位的三种实现方法 --By LXW
- Python学习,类空间问题及类之间的关系
- “Windows 无法访问指定设备、路径或文件。你可能没有适当的权限访问该项目。”解决办法
热门文章
- Java调用打印机读写文件
- BitTorrent協議規範(转自維基百科)
- eas 在linux下安装_eas服务器安装
- 计算机弹歌曲学猫叫,学猫叫在线试听_小潘潘_高音质歌曲_九酷音乐
- 关于《【校园招聘】被南瑞集团坑了。。。》的补充说明和思考20121128
- 从郭美美霸气侧漏看项目管理之项目经理防身术
- 使用git reset回退版本
- iMeta | 浙大吴顶峰和同济刘蕾等对微生物富集分析中Reporter Score的误用研究
- Vue.use 写多个_收藏!如何写好SCI论文里的主题句,助你SCI写作事半功倍!
- 浅谈 qmake 之 pro、pri、prf、prl文件