美文网首页
52. N皇后 II

52. N皇后 II

作者: 间歇性发呆 | 来源:发表于2019-11-08 12:33 被阅读0次

n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。


N皇后 II

上图为 8 皇后问题的一种解法。

给定一个整数 n,返回 n 皇后不同的解决方案的数量。

示例:

输入: 4
输出: 2
解释: 4 皇后问题存在如下两个不同的解法。
[
[".Q..", // 解法 1
"...Q",
"Q...",
"..Q."],

["..Q.", // 解法 2
"Q...",
"...Q",
".Q.."]
]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/n-queens-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

与N皇后的解题一致,省掉了创建字符串

class Solution {
    private int targetN; // n
    private int resultCnt;  // 解决方案的数量
    private boolean[] columnChoice;  // 已经被选择的列
    private boolean[] leftSlant;     // x-y=b,存储b
    private boolean[] rightSlant;    // x+y=b,存储b

    public int totalNQueens(int n) {
        targetN = n;
        resultCnt = 0;
        columnChoice = new boolean[targetN];
        leftSlant = new boolean[targetN * 2];
        rightSlant = new boolean[targetN * 2];
        searchQueen(0);
        return resultCnt;
    }

    private void searchQueen(int curRow) {
        if (curRow == targetN) {
            resultCnt ++;
            return;
        }
        for (int i = 0; i < targetN; i++) {
            // 满足当前列 && 对角线上
            if (!columnChoice[i] && !leftSlant[curRow - i + targetN] && !rightSlant[curRow + i]) {
                columnChoice[i] = true;
                leftSlant[curRow - i + targetN] = true;
                rightSlant[curRow + i] = true;
                searchQueen(curRow + 1);
                // 回退
                columnChoice[i] = false;
                leftSlant[curRow - i + targetN] = false;
                rightSlant[curRow + i] = false;
            }
        }
    }
}
运行效率

相关文章

  • LeetCode 52. N皇后 II(N-Queens II)

    52. N皇后 II N皇后 IIn 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之...

  • 2.回溯(二)

    https://leetcode-cn.com/tag/backtracking/ 52. N皇后 II难度困难6...

  • 52. N皇后 II

    n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。N皇后 II上图为...

  • 52. N皇后 II

    n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。 上图为 8 皇后...

  • Leetcode-52N-Queens II

    52. N-Queens II(待改进) The n-queens puzzle is the problem o...

  • 52. N-Queens II N皇后 ||

    题目链接tag: Hard; question:  The n-queens puzzle is the prob...

  • [DFS]52. N-Queens II

    分类:DFS 时间复杂度: O(n^2) 52. N-Queens II The n-queens puzzle ...

  • LeetCode 力扣 52. N皇后 II

    题目描述(困难难度) 和上一题一样,只不过这次不需要返回所有结果,只需要返回有多少个解就可以。 解法一 我们直接把...

  • n-queens(n皇后问题)

    n queens ii(n皇后问题-只计数不保存) 问题描述 The n queens puzzle is the...

  • N皇后 II

    n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。 上图为 8 皇后...

网友评论

      本文标题:52. N皇后 II

      本文链接:https://www.haomeiwen.com/subject/jrvibctx.html