From 827cc69b7141a7dedfa2c4363c5d827d81383c47 Mon Sep 17 00:00:00 2001 From: jerryfishcode <91447694+jerryfishcode@users.noreply.github.com> Date: Tue, 28 Sep 2021 12:29:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E52.=20N=E7=9A=87=E5=90=8E=20I?= =?UTF-8?q?I=20JavaScript=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0052.N皇后II.md | 44 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) 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; +}; +```