编辑代码

function solveNQueens(n) {
    function isValid(row, col, chessBoard, n) {
        // 判断列
        for (let i = 0; i < row; i++) {
            if (chessBoard[i][col] === 1) {
                return false
            }
        }
        // 左斜线 45°
        for (let i = row - 1, j = col - 1; i >= 0 && j >= 0; i-- , j--) {
            if (chessBoard[i][j] === 1) {
                return false
            }
        }
        // 右斜线 135°
        for (let i = row - 1, j = col + 1; i >= 0 && j < n; i-- , j++) {
            if (chessBoard[i][j] === 1) {   
                return false
            }
        }
        return true
    }

    function transform(chessBoard) {
        let res = []
        chessBoard.forEach(row => {
            res.push(row.join(''))
        })
        // console.log(res)
        return res
    }

    let res = []
    function backtracing(row, chessBoard) {
        if (row === n) {
            res.push(transform(chessBoard))
            return
        }

        for (let col = 0; col < n; col++) {
            if (isValid(row, col, chessBoard, n)) {
                chessBoard[row][col] = 1
                backtracing(row + 1, chessBoard)
                chessBoard[row][col] = 0
            }
        }
    }

    let chessBoard = new Array(n).fill([]).map(() => new Array(n).fill(0))
    backtracing(0, chessBoard)
    console.log(res)
}

solveNQueens(4)