Sunday, August 16, 2015

Leetcode 52. N-Queens II

https://leetcode.com/problems/n-queens-ii/

Still DFS. Because no obvious relation between n and n+1, so dynamic programming is not very easy to use.

Solution:
# T:O(n!) S:O(n)
class Solution:
    # @return an integer
    def totalNQueens(self, n):
        self.cols = [False] * n
        self.main_diag = [False] * (2 * n)
        self.anti_diag = [False] * (2 * n)
        return self.totalNQueensRecu([], 0, n)
    
    def totalNQueensRecu(self, solution, row, n):
        if row == n:
            return 1
        result = 0
        for i in xrange(n):
            if not self.cols[i] and not self.main_diag[row + i] and not self.anti_diag[row - i + n]:
                self.cols[i] = self.main_diag[row + i] = self.anti_diag[row - i + n] = True
                result += self.totalNQueensRecu(solution + [i], row + 1, n)
                self.cols[i] = self.main_diag[row + i] = self.anti_diag[row - i + n] = False
        return result
Run Time: 60 ms

No comments:

Post a Comment