class Solution {
// 保存结果
List<List<String>> res = new ArrayList<>();
public List<List<String>> solveNQueens(int n) {
// 创建棋盘
char[][] chessBoard = new char[n][n];
for(char[] c:chessBoard){
Arrays.fill(c,'.');
}
backTracking(n,chessBoard,0);
return res;
}
public void backTracking(int n,char[][] chessBoard,int row){
// 当最后一行递归完之后,收集结果
if(row == n){
res.add(getList(chessBoard));
return;
}
// 遍历列,看放在什么位置合适
for(int col=0; col<n;col++){
if(isValid(row,col,chessBoard,n)){
chessBoard[row][col] = 'Q';
backTracking(n,chessBoard,row+1);
chessBoard[row][col] = '.';
}
}
}
public List<String> getList(char[][] chessBoard){
List<String> list = new ArrayList<>();
for(char[] c:chessBoard){
list.add(String.copyValueOf(c));
}
return list;
}
// 检验在row,col坐标下放皇后,是否有效
public boolean isValid(int row,int col,char[][] chessBoard,int n){
// 验证列
for(int i=0; i<row; i++){
if(chessBoard[i][col]=='Q'){
return false;
}
}
// 验证45°
for(int i=row-1,j=col-1; i>=0&&j>=0; i--,j--){
if(chessBoard[i][j]=='Q'){
return false;
}
}
// 验证135°
for(int i=row-1,j=col+1; i>=0&&j<n; i--,j++){
if(chessBoard[i][j]=='Q'){
return false;
}
}
return true;
}
}
力扣51题 N皇后 Java版
最新推荐文章于 2024-09-14 18:46:05 发布