题目描述
示例:
输入: 4
输出: 2
解释: 4 皇后问题存在如下两个不同的解法。
[
[".Q…", // 解法 1
“…Q”,
“Q…”,
“…Q.”],
["…Q.", // 解法 2
“Q…”,
“…Q”,
“.Q…”]
]
题目分析
N皇后 II和LeetCode 51其实是一摸一样的题,不过这道题就是把回溯做到底了而已,相比之下比上一题更简单了。
源码
class Solution {
public int totalNQueens(int n) {
boolean[] col=new boolean[n];
boolean[] main_diag=new boolean[2*n];
boolean[] anti_diag=new boolean[2*n];
return dfs(col,main_diag,anti_diag,n,0);
}
public int dfs(boolean[] col,boolean[] main_diag,boolean[] anti_diag,int n,int row){
int res=0;
if(row==n){
return 1;
}
for(int i=0;i<n;i++){
if(!col[i]&&!main_diag[i+row]&&!anti_diag[row-i+n]){
col[i]=true;
main_diag[i+row]=true;
anti_diag[row-i+n]=true;
res+=dfs(col,main_diag,anti_diag,n,row+1);
col[i]=false;
main_diag[i+row]=false;
anti_diag[row-i+n]=false;
}
}
return res;
}
}
难点
只要在上一题的理解上再进行完整的回溯就可以啦。重点还是回溯算法啦。
小结
复习了一次回溯算法。
[1]https://leetcode-cn.com/problems/n-queens-ii/