LeetCode刷题(22)

来源:互联网 发布:php ajax实例 编辑:程序博客网 时间:2024/06/11 20:11

N皇后问题,回溯法。

class Solution(object):    def solveNQueens(self, n):        """        :type n: int        :rtype: List[List[str]]        """                if n == 1:            return [["Q"]]        elif n < 4:            return []        x = [0] * (n + 1)        res = []        k = 1        while k>=1:            x[k] = x[k] + 1            while x[k]<=n and not valid(x, k):                x[k] = x[k] + 1            if x[k] <= n and k == n:                tmp = []                for i in range(1, n+1):                    tmp_s = ""                    for j in range(n):                        if x[i] - 1 == j:                            tmp_s += "Q"                        else :                            tmp_s += "."                    tmp += [tmp_s]                res += [tmp]            elif x[k] <= n and k < n :                k += 1            else:                x[k] = 0                k -= 1        return resdef valid(x, k):    for i in range(1, k):        if x[i] == x[k] or (k - i) == abs(x[k] - x[i]):            return False    return True