LeetCode 52.N-Queens II

LeetCode 52.N-Queens II ()

题目

链接

https://leetcode-cn.com/problems/n-queens-ii/

问题描述

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

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

示例

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

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

提示

https://leetcode-cn.com/problems/n-queens-ii/

思路

回溯法,这个不需要输出实际的结果即可。

复杂度分析

时间复杂度 O(n!)
空间复杂度 O(n)

代码

Java

  HashSet<String> ans = new HashSet<>();
    int[] queen;

    public int totalNQueens(int n) {
        queen = new int[n];
        place(0, n);
        return ans.size();
    }

    public String getans(int n) {
        StringBuffer s = new StringBuffer();
        for (int i = 0; i < n; i++) {
            s.append(queen[i]);
        }
        return s.toString();
    }

    public void place(int t, int n) {
        if (t == n) {
            ans.add(getans(n));
            return;
        }
        for (int i = 0; i < n; i++) {
            if (check(t, i, n)) {
                queen[t] = i;
                place(t + 1, n);
                queen[t] = 0;
            }
        }
    }

    public boolean check(int t, int x, int n) {
        for (int i = 0; i < t; i++) {
            if (queen[i] == x || queen[i] == x - t + i || queen[i] == x + t - i) {
                return false;
            }
        }
        return true;
    }
posted @ 2019-05-19 19:08  cheng102e  阅读(123)  评论(0编辑  收藏  举报