[Leetcode] 51. N皇后
题目链接:https://leetcode-cn.com/problems/n-queens/
分析:
x&(-x)保留最后一位的1,其它位置全部置零
x&(x-1)最后一个1置零。availablePos用1表示可以放置的地方,而columns,diagnolL, diagnolR用1表示不可用的位置。
Python
class Solution:
    def solveNQueens(self, n: int) -> List[List[str]]:
        def generateBoard():
            board = []
            for i in queen:
                tmp = ['.']*n
                tmp[i] = 'Q'
                board.append(''.join(tmp))
            return board
        def solve(row, columns, diagnolL, diganolR):
            if  row == n:
                res.append(generateBoard())
                return 
            else:
                availablePos = ((1<<n)-1)&(~(columns|diagnolL|diganolR))
                
                while availablePos:
                    column = availablePos & (-availablePos)
                    availablePos &= (availablePos-1)
                    pos = bin(column-1).count('1')
                    queen[row] = pos 
                    solve(row+1, columns|column, (diagnolL|column)<<1, (diganolR|column)>>1)
        queen = [-1]*n
        res = []
        solve(0, 0, 0, 0)
        return res

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号