diff --git a/problems/0052.N皇后II.md b/problems/0052.N皇后II.md index 1a34f763..d7d7feb8 100644 --- a/problems/0052.N皇后II.md +++ b/problems/0052.N皇后II.md @@ -101,4 +101,48 @@ public: ``` # 其他语言补充 +JavaScript +```javascript +var totalNQueens = function(n) { + let count = 0; + const backtracking = (n, row, chessboard) => { + if(row === n){ + count++; + return; + } + for(let col = 0; col < n; col++){ + if(isValid(row, col, chessboard, n)) { // 验证合法就可以放 + chessboard[row][col] = 'Q'; // 放置皇后 + backtracking(n, row + 1, chessboard); + chessboard[row][col] = '.'; // 回溯 + } + } + } + const isValid = (row, col, chessboard, n) => { + // 检查列 + for(let i = 0; i < row; i++){ // 这是一个剪枝 + if(chessboard[i][col] === 'Q'){ + return false; + } + } + // 检查 45度角是否有皇后 + for(let i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--){ + if(chessboard[i][j] === 'Q'){ + return false; + } + } + // 检查 135度角是否有皇后 + for(let i = row - 1, j = col + 1; i >= 0 && j < n; i--, j++){ + if(chessboard[i][j] === 'Q'){ + return false; + } + } + return true; + } + + const chessboard = new Array(n).fill([]).map(() => new Array(n).fill('.')); + backtracking(n, 0, chessboard); + return count; +}; +```