N Queens

Get all valid ways of putting N Queens on an N * N chessboard so that no two Queens threaten each other.

Assumptions

N > 0

Return

A list of ways of putting the N Queens
Each way is represented by a list of the Queen's y index for x indices of 0 to (N - 1)

Example

N = 4, there are two ways of putting 4 queens:

[1, 3, 0, 2] --> the Queen on the first row is at y index 1, the Queen on the second row is at y index 3, the Queen on the third row is at y index 0 and the Queen on the fourth row is at y index 2.

[2, 0, 3, 1] --> the Queen on the first row is at y index 2, the Queen on the second row is at y index 0, the Queen on the third row is at y index 3 and the Queen on the fourth row is at y index 1.

class Solution(object):
    def nqueens(self, n):
      res = []
      self.dfs(n,0,[],res)
      return res
    
    def dfs(self,n,i,state.res):
      if i == n:
        res.append(state[:])
        return 
      for pos in xrange(n):
        if self.isValid(state,pos):
          state.append(pos)
          self.dfs(n,i+1,state,res)
          state.pop()
      return 
    
    def isValid(self,state,pos):
      for i in xrange(len(state)):
        if abs(state[i] - pos) in (0,len(state) - i):
          return False
      return True

你可能感兴趣的:(N Queens)