N皇后问题 --使用位运算解决

关键位运算
x & (-x) 取得最低位1
x & (x-1) 去掉最低位1

class Solution(object):
    def totalNQueens(self, n):
        """
        :type n: int
        :rtype: int
        """
        if n < 1 : return []
        self.count = 0
        self.DFS(n,0,0,0,0)
        return self.count
    
    def DFS(self,n, row, cols, pie, na):
        
        if row >=n:
            self.count += 1
            return
        # 得到当前所有的空位
        bits = (~(cols | pie | na)) & ((1<<n)-1)
        
        while bits:
            p = bits & -bits # 取到最低位的1
            self.DFS(n, row + 1, cols|p, (pie|p) <<1, (na|p)>>1)
            bits = bits & (bits - 1) # 去掉最低位的1

posted @ 2019-10-08 11:30  james_cai  阅读(247)  评论(0)    收藏  举报