332.重新安排行程
思路不明确
51. N皇后(可跳过)
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(chessboard, n, 0);
return res;
}
private void backTracking(char[][] chessboard, int n, int row) {//n为棋盘大小
if(row == n) {//终止条件
res.add(Array2List(chessboard,n));
return;
}
for(int i = 0; i < n; i++) {
if(isValid(chessboard, n, row, i)) {//如果有效
chessboard[row][i] = 'Q';
backTracking(chessboard, n, row + 1);
chessboard[row][i] = '.';//回溯
}
}
}
private List<String> Array2List(char[][] chessboard, int n) {//将二维数组赋给list
List<String> list = new ArrayList<>();
for(char[] c : chessboard) {
list.add(String.copyValueOf(c));
}
return list;
}
private boolean isValid(char[][] chessboard, int n, int row, int col) {//判断是否有效
for(int i = 0; i < row; i++) {//列
if(chessboard[i][col] == 'Q') return false;
}
for(int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {//45°
if(chessboard[i][j] == 'Q') return false;
}
for(int i = row - 1, j = col + 1; i >= 0 && j < n; i--, j++) {//135°
if(chessboard[i][j] == 'Q') return false;
}
return true;
}
}
37. 解数独(可跳过)
class Solution {
public void solveSudoku(char[][] board) {
backTracking(board);
}
private boolean backTracking(char[][] board) {
for(int row = 0; row < board.length; row++) {
for(int col = 0; col < board[0].length; col++) {
if(board[row][col] == '.') {
for(char k = '1'; k <= '9'; k++) {
if(isvalid(board, row, col, k)) {
board[row][col] = k;
if(backTracking(board)) return true;
board[row][col] = '.';
}
}
return false;
}
}
}
return true;
}
private boolean isvalid(char[][] board, int row, int col, char k) {
for(int i = 0; i < 9; i++) {
if (board[i][col] == k) return false;//每列
}
for(int i = 0; i < 9; i++) {
if (board[row][i] == k) return false;//每行
}
int startrow = row / 3 * 3;
int startcol = col / 3 * 3;
for(int i = startrow; i < startrow + 3; i++) {
for(int j = startcol; j < startcol + 3; j++) {
if (board[i][j] == k) return false;//九宫格
}
}
return true;
}
}
总结
看链接