解题思路:
回溯
提交代码:
class Solution {
public int totalNQueens(int n) {
int[][] positions=new int[n][n];
int[] columns=new int[n];
for(int i=0;i<n;i++)
columns[i]=-1;
return newDistribution(0,n,positions,columns);
}
public int newDistribution(int row,int n,
int[][] positions,int[] columns) {
/* row: current row
* n: the size of the chess
* positions: present valid queens' positions we have
* columns: columns where current queens have occupied
*/
if(row==n) return 1;
int res=0;
for(int i=0;i<n;i++) {
positions[row][i]=1;
if(isValid(row,positions,columns,i)) {
columns[row]=i;
res+=newDistribution(row+1,n,positions,columns);
}
columns[row]=-1;positions[row][i]=0;
}
return res;
}
public boolean isValid(int row,int[][] positions,int[] columns,int column) {
/* check if the new column in row is valid
* row: current row
* positions: the positions of current queens we have
* columns: the columns of current queens occupy
* */
//check the volumn
for(int i=0;i<row;i++)
if(columns[i]==column)
return false;
//check the diagonal
for(int i=0;i<row;i++) {
if(row-i==(column-columns[i]))
return false;
else if(row-i==columns[i]-column)
return false;
}
return true;
}
}
运行结果: