题解 | #N皇后问题#

N皇后问题

https://www.nowcoder.com/practice/c76408782512486d91eea181107293b6

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param n int整型 the n
 * @return int整型
 */
function Nqueen(n) {
    // write code here
    let arr = [];
    for (let i = 0; i < n; i++) {
        for (let j = 0; j < n; j++) {
            arr.push({
                i: i,
                j: j,
            });
        }
    }
    let result = [];
    function dps(m, arr, res) {
        if (m == 0) {
            if (checkValid(res, result)) {
                result.push(res);
            }
            return;
        }
        if (arr.length <= 0) {
            return;
        }
        for (let i = 0; i < arr.length / 2.9999; i++) {
            let iIndex = arr[i].i;
            let jIndex = arr[i].j;
            let filterArr = arr.filter(
                (item) =>
                    item.i != iIndex &&
                    item.j != jIndex &&
                    item.i - iIndex !== item.j - jIndex &&
                    item.i - iIndex + (item.j - jIndex) != 0
            );
            let tt = Array.from(res);
            tt[iIndex] = jIndex;
            dps(m - 1, filterArr, tt);
        }
    }
    dps(n, arr, new Array(n));
    return result.length;
}
function checkValid(res, result) {
    for (let i = 0; i < result.length; i++) {
        if (result[i].every((item, index) => item == res[index])) {
            return false;
        }
    }
    return true;
}

module.exports = {
    Nqueen: Nqueen,
};

全部评论
通过不停的优化,终于解决了超时问题,希望对大家有所裨益
点赞
送花
回复
分享
发布于 2023-12-01 15:50 上海

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务