首页 > 其他 > 详细

leetcode-51-N皇后

时间:2019-10-18 13:23:47      阅读:52      评论:0      收藏:0      [点我收藏+]

题目描述:

技术分享图片

 

 技术分享图片

 

 第一次提交:回溯:

class Solution:
    def solveNQueens(self, n: int) -> List[List[str]]:
        def sub(string, p, c):
            new = [s for s in string]
            new[p] = c
            return ‘‘.join(new)
        def check(i,j,board):
            for x in range(n):
                if board[x][j] == "Q":
                    return False
            for x in [-1,1]:
                for y in [-1,1]:
                    i1 = i + x
                    j1 = j + y
                    while 0<=i1<n and 0<=j1<n:
                        if board[i1][j1] == "Q":
                            return False
                        else:
                            i1 += x
                            j1 += y
            return True
        def backtrack(i,board):
            if i == n:
                res.append(board.copy())
                return
            for j in range(n):
                if check(i,j,board):
                    board[i] = sub(board[i],j,"Q")
                    backtrack(i+1,board)
                    board[i] = sub(board[i], j, ".")
            return False

        res = []
        board = ["." * n for _ in range(n)]
        backtrack(0, board)
        return res

优化:O(N!)

class Solution:
    def solveNQueens(self, n: int) -> List[List[str]]:
        res = []
        s = "." * n
        def backtrack(i, tmp,col,z_diagonal,f_diagonal):
            if i == n:
                res.append(tmp)
                return 
            for j in range(n):
                if j not in col and i + j not in  z_diagonal and i - j not in f_diagonal:
                    backtrack(i+1,tmp + [s[:j] + "Q" + s[j+1:]], col | {j}, z_diagonal |{i + j} , f_diagonal |{i - j}  ) 
            
        backtrack(0,[],set(),set(),set())    
        return res

 

leetcode-51-N皇后

原文:https://www.cnblogs.com/oldby/p/11697714.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!