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 resultRun Time: 60 ms
No comments:
Post a Comment