题目链接
java
class Solution {
List<List<String>> res = new ArrayList<>();
List<String> path = new ArrayList<>();
void backtracking(char[][] board, int n, int row) {
if (row >= n) {
res.add(new ArrayList<>(path));
return;
}
// 尝试在当前行的每一列放置皇后
for (int col = 0; col < n; col++) {
if (isValid(board, row, col, n)) {
board[row][col] = 'Q';
path.add(new String(board[row]));
backtracking(board, n, row + 1);
board[row][col] = '.';
path.remove(path.size() - 1);
}
}
}
public boolean isValid(char[][] board, int row, int col, int n) {
// 检查同列是否有皇后,因为按行插入同行不会有
for (int i = 0; i < n; i++) {
if (board[i][col] == 'Q') {
return false;
}
}
// 检查右上斜线
for (int i = row, j = col; i >= 0 && j < n; i--, j++) {
if (board[i][j] == 'Q')
return false;
}
// 检查左上斜线
for (int i = row, j = col; i >= 0 && j >= 0; i--, j--) {
if (board[i][j] == 'Q')
return false;
}
return true;
}
public List<List<String>> solveNQueens(int n) {
char[][] board = new char[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
board[i][j] = '.';
}
}
backtracking(board, n, 0);
return res;
}
}
小结:初始化棋盘,按行递归处理,确保每行只有一个皇后,之后尝试在当前行的每一列放置皇后。
Java字符数组转字符串
- 使用
String
构造函数
java
char[] charArray = {'H', 'e', 'l', 'l', 'o'};
String str = new String(charArray); // "Hello"
- 使用
String.valueOf()
java
char[] charArray = {'W', 'o', 'r', 'l', 'd'};
String str = String.valueOf(charArray); // "World"