mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 08:50:15 +08:00
feat: 0051.N皇后 更简洁清晰的javascript版本
This commit is contained in:
@ -453,60 +453,66 @@ func isValid(n, row, col int, chessboard [][]string) bool {
|
|||||||
|
|
||||||
### Javascript
|
### Javascript
|
||||||
```Javascript
|
```Javascript
|
||||||
var solveNQueens = function(n) {
|
/**
|
||||||
function isValid(row, col, chessBoard, n) {
|
* @param {number} n
|
||||||
|
* @return {string[][]}
|
||||||
for(let i = 0; i < row; i++) {
|
*/
|
||||||
if(chessBoard[i][col] === 'Q') {
|
var solveNQueens = function (n) {
|
||||||
return false
|
const ans = [];
|
||||||
}
|
const path = [];
|
||||||
}
|
const matrix = new Array(n).fill(0).map(() => new Array(n).fill("."));
|
||||||
|
// 判断是否能相互攻击
|
||||||
for(let i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {
|
const canAttack = (matrix, row, col) => {
|
||||||
if(chessBoard[i][j] === 'Q') {
|
let i;
|
||||||
return false
|
let j;
|
||||||
}
|
// 判断正上方和正下方是否有皇后
|
||||||
}
|
for (i = 0, j = col; i < n; i++) {
|
||||||
|
if (matrix[i][j] === "Q") {
|
||||||
for(let i = row - 1, j = col + 1; i >= 0 && j < n; i--, j++) {
|
return true;
|
||||||
if(chessBoard[i][j] === 'Q') {
|
}
|
||||||
return false
|
}
|
||||||
}
|
// 判断正左边和正右边是否有皇后
|
||||||
}
|
for (i = row, j = 0; j < n; j++) {
|
||||||
return true
|
if (matrix[i][j] === "Q") {
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
function transformChessBoard(chessBoard) {
|
}
|
||||||
let chessBoardBack = []
|
// 判断左上方是否有皇后
|
||||||
chessBoard.forEach(row => {
|
for (i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {
|
||||||
let rowStr = ''
|
if (matrix[i][j] === "Q") {
|
||||||
row.forEach(value => {
|
return true;
|
||||||
rowStr += value
|
}
|
||||||
})
|
}
|
||||||
chessBoardBack.push(rowStr)
|
// 判断右上方是否有皇后
|
||||||
})
|
for (i = row - 1, j = col + 1; i >= 0 && j < n; i--, j++) {
|
||||||
|
if (matrix[i][j] === "Q") {
|
||||||
return chessBoardBack
|
return true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
let result = []
|
return false;
|
||||||
function backtracing(row,chessBoard) {
|
};
|
||||||
if(row === n) {
|
const backtrack = (matrix, row, col) => {
|
||||||
result.push(transformChessBoard(chessBoard))
|
if (path.length === matrix.length) {
|
||||||
return
|
ans.push(path.slice());
|
||||||
}
|
return;
|
||||||
for(let col = 0; col < n; col++) {
|
}
|
||||||
if(isValid(row, col, chessBoard, n)) {
|
for (let i = row; i < matrix.length; i++) {
|
||||||
chessBoard[row][col] = 'Q'
|
for (let j = col; j < matrix.length; j++) {
|
||||||
backtracing(row + 1,chessBoard)
|
// 当前位置会导致互相攻击 继续下一轮搜索
|
||||||
chessBoard[row][col] = '.'
|
if (canAttack(matrix, i, j)) {
|
||||||
}
|
continue;
|
||||||
}
|
}
|
||||||
}
|
matrix[i][j] = "Q";
|
||||||
let chessBoard = new Array(n).fill([]).map(() => new Array(n).fill('.'))
|
path.push(matrix[i].join(""));
|
||||||
backtracing(0,chessBoard)
|
// 另起一行搜索 同一行只能有一个皇后
|
||||||
return result
|
backtrack(matrix, i + 1, 0);
|
||||||
|
matrix[i][j] = ".";
|
||||||
|
path.pop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
backtrack(matrix, 0, 0);
|
||||||
|
return ans;
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user