根据n皇后问题,现在返回n皇后不同的解决方案的数量而不是具体的放置布局
class Solution {
public static int res;
public int totalNQueens(int n) {
res = 0;
int[] usedColumns = new int[n];
dfs(usedColumns, 0, n);
return res;
}
private void dfs(int[] usedColumns, int row, int n) {
if(row == n) {
res++;
return;
}
for(int i = 0; i < n; i++) {
if(isValid(usedColumns, row, i)) {
usedColumns[row] = i;
dfs(usedColumns, row + 1, n);
}
}
}
private boolean isValid(int[] usedColumns, int row, int column) {
for(int i = 0; i < row; i++) {
if(usedColumns[i] == column) return false;
if((i - usedColumns[i]) == (row - column)) return false;
if((i + usedColumns[i]) == (row + column)) return false;
}
return true;
}
}
不用global variable,用int数组来存res的值
class Solution {
public int totalNQueens(int n) {
int[] res = {0};
int[] usedColumns = new int[n];
dfs(usedColumns, 0, n, res);
return res[0];
}
private void dfs(int[] usedColumns, int row, int n, int[] res) {
if(row == n) {
res[0]++;
return;
}
for(int i = 0; i < n; i++) {
if(isValid(usedColumns, row, i)) {
usedColumns[row] = i;
dfs(usedColumns, row + 1, n, res);
}
}
}
private boolean isValid(int[] usedColumns, int row, int column) {
for(int i = 0; i < row; i++) {
if(usedColumns[i] == column) return false;
if((i - usedColumns[i]) == (row - column)) return false;
if((i + usedColumns[i]) == (row + column)) return false;
}
return true;
}
}