LeetCode 52 N皇后II
LeetCode52 N皇后II
题目描述
给定一个整数 n,返回 n 皇后不同的解决方案的数量。
样例
输入: 4
输出: 2
解释: 4 皇后问题存在如下两个不同的解法。
[
[".Q..", // 解法 1
"...Q",
"Q...",
"..Q."],
["..Q.", // 解法 2
"Q...",
"...Q",
".Q.."]
]
算法分析
- 与51题一样,关键是对角线
时间复杂度
Java代码
class Solution {
static int N = 20;
static boolean[] col = new boolean[N];
static boolean[] dg = new boolean[2*N - 1];
static boolean[] udg = new boolean[2*N -1];
static char[][] g = new char[N][N];
static int ans = 0;
static void dfs(int y, int n){
if(y == n){
ans ++;
}
//一行中枚举的每一列
for(int x = 0; x < n; x++){
if(!col[x]&&!dg[y-x+n]&&!udg[y+x]){
col[x] = dg[y-x+n] = udg[y+x] = true;
g[y][x] = 'Q';
dfs(y+1,n);
col[x] = dg[y-x+n] = udg[y+x] = false;
g[y][x] = '.';
}
}
}
public int totalNQueens(int n) {
ans = 0;
for(int i = 0; i < n; i ++){
for(int j = 0; j < n; j ++){
g[i][j] = '.';
}
}
dfs(0,n);
return ans;
}
}

浙公网安备 33010602011771号