Loading

LeetCode 52 N皇后II

LeetCode52 N皇后II

题目描述

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

样例

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

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

算法分析

  • 与51题一样,关键是对角线

时间复杂度

Java代码

class Solution {

    static int N = 20;
    static boolean[] col = new boolean[N];
    static boolean[] dg = new boolean[2*N - 1];
    static boolean[] udg = new boolean[2*N -1];
    static char[][] g = new char[N][N];
    static int ans = 0;

    static void dfs(int y, int n){
        if(y == n){
            ans ++;
        }

        //一行中枚举的每一列
        for(int x = 0; x < n; x++){
            if(!col[x]&&!dg[y-x+n]&&!udg[y+x]){
                col[x] = dg[y-x+n] = udg[y+x] = true;
                g[y][x] = 'Q';
                dfs(y+1,n);
                col[x] = dg[y-x+n] = udg[y+x] = false;
                g[y][x] = '.';
            }
        }
    }

    public int totalNQueens(int n) {
        ans = 0;
        for(int i = 0; i < n; i ++){
            for(int j = 0; j < n; j ++){
                g[i][j] = '.';
            }
        }
        dfs(0,n);
        return ans;
    }
}
posted @ 2020-11-12 17:02  想用包子换论文  阅读(69)  评论(0)    收藏  举报