LeetCode 51. N 皇后
题目描述
解题思路
回溯。
class Solution {
public List<List<String>> res = new ArrayList<>();
public List<List<String>> solveNQueens(int n) {
//记录路径
char[][] track = new char[n][n];
//初始化空棋盘
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
track[i][j] = '.';
backtrack(track, 0);
return res;
}
void backtrack(char[][] track, int row){
if(row == track.length){
res.add(charToArrayList(track));
return;
}
for(int col = 0; col < track[0].length; col ++){
if(!isValid(track, row, col)) continue;
track[row][col] = 'Q';
backtrack(track, row + 1);
track[row][col] = '.';
}
}
boolean isValid(char[][] track, int row, int col){
//列是否冲突
for(int i = 0; i < row; i ++){
if(track[i][col] == 'Q')
return false;
}
//左上角是否冲突
for (int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--){
if (track[i][j] == 'Q')
return false;
}
//右上角是否冲突
for(int i = row - 1, j = col + 1; i >= 0 && j < track.length; i --, j ++){
if(track[i][j] == 'Q')
return false;
}
return true;
}
List<String> charToArrayList(char[][] track){
List<String> array = new ArrayList<>();
for(char[] board : track){
array.add(String.valueOf(board));
}
return array;
}
}