52. N-Queens II

java

class Solution {
    int count = 0;
    public int totalNQueens(int n) {
        if (n <= 0) {
            return 0;
        }
        dfs(new boolean[n], new boolean[2 * n], new boolean[2 * n], 0, n);
        return count;
    }
    private void dfs(boolean[] shu,
                     boolean[] pie,
                     boolean[] na,
                     int row,
                     int n) {
        if (row == n) {
            count++;
            return;
        }
        for (int col = 0; col < n; col++) {
            int id1 = col + row;
            int id2 = n + col - row;
            if (shu[col] || pie[id1] || na[id2]) {
                continue;
            }
            shu[col] = true;
            pie[id1] = true;
            na[id2] = true;
            dfs(shu, pie, na, row + 1, n);
            na[id2] = false;
            pie[id1] = false;
            shu[col] = false;
        }
    }
}

python

class Solution:
    """
    @param: n: The number of queens.
    @return: The total number of distinct solutions.
    """
    count = 0
    def totalNQueens(self, n):
        # write your code here
        if n <= 0:
            return 0
        self.dfs([False] * n, [False] * 2 * n, [False] * 2 * n, 0, n)
        return self.count
        
    def dfs(self, shu, pie, na, row, n):
        if row == n:
            self.count += 1
            return
        for col in range(n):
            id1, id2 = col + row, n + col - row
            if shu[col] or pie[id1] or na[id2]:
                continue
            shu[col], pie[id1], na[id2] = True, True, True
            self.dfs(shu, pie, na, row + 1, n)
            shu[col], pie[id1], na[id2] = False, False, False
            
                
            


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ncst

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值