52. N-Queens II N皇后II
网址:https://leetcode.com/problems/n-queens-ii/
方法1:按照逻辑思路,通过回溯法解决问题。速度较慢!
class Solution {
public:
void backTracking(vector<string> res, int &ans, int r, int n)
{
bool legal = true; // 定义一个flag,用于判断某一行中的某个位置是否合法
if(r == n) // 表示已经遍历完所有行
{
ans++;
return;
}
for(int j = ; j<n; j++) // 判断当前行中的每个位置
{
legal = true;
for(int i = ; i<=r-; i++) // 判断此位置是否合法
{
// 分别判断 列、副对角线、主对角线
// j - (r-i)
if((res[i][j] == 'Q') || (res[i][j+i-r] == 'Q') || (res[i][j+r-i] == 'Q'))
{
// 说明此位置会被其他皇后攻击
legal = false;
break;
}
}
if(legal)
{
// 在此位置放置一个皇后
res[r][j] = 'Q';
// 将新的数据再次进行回溯
backTracking(res, ans, r+, n);
// 回溯完毕后切记恢复原来的状态,以剩余的for循环
res[r][j] = '.';
}
}
}
int totalNQueens(int n) {
string s(n, '.');
vector<string> vc(n, s);
int ans = ;
backTracking(vc, ans, , n);
return ans;
}
};

方法2:位运算
参考:https://www.bilibili.com/video/av46292575/?p=43
class Solution {
public:
void dfs(int &ans, int n, int row, int col, int pie, int na)
{
if(row == n) // 表示已经遍历完所有行
{
ans++;
return;
}
// 把int类型的col、pie、na以二进制来看待,0分别表示此格子不会被其他皇后以某种方式攻击,1表示会
// (col|pie|na)得到总的攻击情况,但我们需要的是当中 0 的位置,因为0的位置无法获取,所以
// 对(col|pie|na)取反,即'~'操作符。取反后,数据的后n位是满足我们的要求的
// 但是,前面原来的0都变成了1,所以要想办法把第n位之前的0还原为1
// (1 << n)-1) 即可产生000...001111这样一个数,将其&上原来的数,即可实现预想
int bits = ((~(col|pie|na))&(( << n)-));
while(bits) //
{
int pos = bits & -bits; // 得到一个只保留最后一位 1 ,其他的全为 0 的数
// 更新数据,注意对角线的挪移
dfs(ans, n, row+, col|pos, (pie|pos)<<, (na|pos)>>);
// 把bits去掉最后一位的 1
bits = bits & (bits-);
}
}
int totalNQueens(int n) {
int ans = ;
dfs(ans, n, , , , );
return ans;
}
};

52. N-Queens II N皇后II的更多相关文章
- Leetcode之回溯法专题-52. N皇后 II(N-Queens II)
Leetcode之回溯法专题-52. N皇后 II(N-Queens II) 与51题的代码80%一样,只不过52要求解的数量,51求具体解,点击进入51 class Solution { int a ...
- Java实现 LeetCode 52 N皇后 II
52. N皇后 II n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回 n 皇后不同的解决方案 ...
- leetcode 51. N皇后 及 52.N皇后 II
51. N皇后 问题描述 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后 ...
- 【leetcode-51,52】 N皇后,N皇后 II
N皇后(hard) n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后问题 ...
- 洛谷 P2616 [USACO10JAN]购买饲料II Buying Feed, II
洛谷 P2616 [USACO10JAN]购买饲料II Buying Feed, II https://www.luogu.org/problemnew/show/P2616 题目描述 Farmer ...
- Leetcode之二分法专题-275. H指数 II(H-Index II)
Leetcode之二分法专题-275. H指数 II(H-Index II) 给定一位研究者论文被引用次数的数组(被引用次数是非负整数),数组已经按照升序排列.编写一个方法,计算出研究者的 h 指数. ...
- Leetcode之回溯法专题-90. 子集 II(Subsets II)
Leetcode之回溯法专题-90. 子集 II(Subsets II) 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入 ...
- Leetcode之回溯法专题-47. 全排列 II(Permutations II)
Leetcode之回溯法专题-47. 全排列 II(Permutations II) 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例: 输入: [1,1,2] 输出: [ [1,1,2] ...
- 【P2616】 【USACO10JAN】购买饲料II Buying Feed, II
P2616 [USACO10JAN]购买饲料II Buying Feed, II 题目描述 Farmer John needs to travel to town to pick up K (1 &l ...
随机推荐
- python itertools 模块
Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数 首先,我们看看itertools提供的几个“无限”迭代器: >>> import itertools ...
- (转)sql 违反了 PRIMARY KEY 约束,不能在对象 中插入重复键
说明你的数据里面有重复记录 两种情况 1.已存在的表中和要导入数据之间的重复 这个时候可以通过在两个表之间建立关联,将主键级联找出重复记录 2.要导入的表中存在重复记录 可通过类似如下的语句将表中的重 ...
- 使用4K分辨率,然后放大DIP200%,软件界面异常.
简单:WFM主界面.AutoScaleMode 选中DIP,然后使用表格容器,容器分割,容器.就可以快速迁移旧程序. 复杂点:读取桌面分辨率,DIP放大....
- 20175208 《Java程序设计》第六周学习总结
20175208 <Java程序设计>第六周学习总结 一.教材知识点总结: 第七章 1.内部类: 成员内部类.静态嵌套类.方法内部类.匿名内部类 .(1).内部类仍然是一个独立的类,在编译 ...
- es7,es8
ES7新特性 ES7在ES6的基础上添加了三项内容:求幂运算符(**).Array.prototype.includes()方法.函数作用域中严格模式的变更. Array.prototype.incl ...
- python函数部分----函数初识
0.来源http://www.cnblogs.com/jin-xin/articles/8241942.html 1.return 返回0个返回值,返回一个返回值.返回多个返回值 None.如果一个变 ...
- 算法(第四版)C# 习题题解——1.4
写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 这一节内容可能会用到的库文件有 ...
- EmberJS 为什么我偏爱 Ember.js 胜过 Angular 和 React.js
文章写的很老到,非常值得一看!评论也很精彩,值得一看 为什么我偏爱 Ember.js 胜过 Angular 和 React.js 前几天看到了这篇文章:Why I prefer Ember.js ov ...
- 【我的前端自学之路】【HTML5】web 存储
以下为自学笔记内容,仅供参考. 转发请保留原文链接:https://www.cnblogs.com/it-dennis/p/10503539.html 什么是Web存储 cookie最大的缺陷是在每一 ...
- mongodb常用的sql语句总结
本文为博主原创,转载请注明出处: 1 . 查询所有 db.getCollection('CollectionName').find() 2.根据条件查询 db.getCollection('Coll ...