N 皇后 II
leetcode第52题(困难)
原链接: https://leetcode-cn.com/problems/n-queens-ii/
题目描述
n 皇后问题 研究的是如何将 n 个皇后放置在 n×n
的棋盘上,并且使皇后彼此之间不能相互攻击。
给你一个整数 n ,返回 n 皇后问题 不同的解决方案的数量。
示例 1:
输入:n = 4,输出:2
解释:如上图所示,4 皇后问题存在两个不同的解法。
示例 2:
输入:n = 1,输出:1
解题思路
1.上篇 N皇后 问题中已经解决了求解N皇后问题的所有解法并输出所有解,那么 N皇后II 并不需要返回所有解法,而是返回有多少种解法即可,这应该是N皇后问题的简化版本。在成功求出一种解法时计数器加一即可。
N皇后问题参考:http://www.jiajiajia.club/official/weblog/o1nkpk9jowzb/170
代码(java)
方式1
class Solution {
public int totalNQueens(int n) {
return begin(n);
}
int w,hh;
boolean [] hang,lie,s,x;
int c=0;
public int begin(int n) {
hang=new boolean[n];
lie=new boolean[n];
s=new boolean[2*n-1];
x=new boolean[2*n-1];
w=(hh=n)-1;
dfs(0);
return c;
}
public void dfs(int n){
if(n>=hh){
c++;
return;
}
for (int i=0;i<hh;i++){
int ni=n+i;
int wi=n+(w-i);
if(hang[i]||lie[n]||s[ni]||x[wi]){
continue;
}else{
hang[i]=true;lie[n]=true;s[ni]=true;x[wi]=true;
dfs(n+1);
hang[i]=false;lie[n]=false;s[ni]=false;x[wi]=false;
}
}
}
}
方式2(积分法)
class Solution {
public int totalNQueens(int n) {
int[] rs = new int[]{0,1,0,0,2,10,4,40,92,352,724,2680};
return rs[n];
}
}
猜你喜欢
ofc
N 皇后
official
886
leetcode第51题(困难)原链接:https://leetcode-cn.com/problems/n-queens/题目描述n皇后问题研究的是如何将n个皇后放置在n×n的棋盘上,并且使皇后彼
blog
八皇后问题
数据结构与算法
7825
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行
ofc
N叉树的前序遍历
official
1060
leetcode第589题题目描述给定一个N叉树,返回其节点值的前序遍历。例如,给定一个3叉树:返回其前序遍历:[1,3,5,6,2,4]。解题思路递归遍历,深度优先搜索代码(java
数据库基础
2916
mysql在一个时间的基础上加n(分钟、小时、天)等SELECTDATE_FORMAT(ADDDATE(now(),INTERVAL20MINUTE),'%Y-%m-%d%H:%i:%s')#加20
blog
数据结构-图的着色问题
数据结构与算法
12867
觉图的着色问题类似与八皇后问题,使用回溯算法(试探法)解决算法描述state[n]存储n个顶点的着色方案,可以选择的颜色为1到m。当t=1时,对当前第t个顶点开始着色:若tn,则已求得一个解,输出着色方
weblog
1264
linux系统vivim编辑器查找指定内容(关键字)在命令行模式下按'/'键,然后输入你要查找的关键字,回车即可此时你可以按n键向下查找,或按N键向上查找
数据结构与算法
1847
约瑟夫环问题描述有m个人,围成一个环,编号为1、2、3、、、m,从第一个人开始循环报数(从1开始数),假设数到n的那个人出局,然后从下一个人继续数数(从1开始数),数到n出列,以此循环,最后那个人为
ofc
c#中属性的声明和保护
weblog
3360
;
usingSystem.Threading.Tasks;
namespaceConsoleApplication3
{
classProgram
{
staticvoidMain(string[]args)
{
Students=n
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。