N-Queens的变形.
#!/usr/bin/python
# -*- coding: utf-8 -*-
'''
N-Queens II
Now, instead outputting board configurations, return the total number of distinct solutions.
'''
class Solution(object):
def __check(self,result,start_index,next_val):
for index,val in enumerate(result[:start_index]):
if (val == next_val) or (abs(index - start_index) == abs(val - next_val)): #将不符合N皇后规则的去掉
return False
return True
def __solveNQueens(self,n,result,start_index,ret):
if start_index == n:
ret[0] += 1
else:
#index代表行数,val代表列数
for i in range(n):
if self.__check(result,start_index,i) == True:
result[start_index] = i
self.__solveNQueens(n,result,start_index + 1,ret)
def totalNQueens(self, n):
"""
:type n: int
:rtype: List[List[str]]
"""
if n == 1:
return 1
if n < 4:
return 0
ret = [0]
self.__solveNQueens(n,[0]*n,0,ret)
return ret[0]
if __name__ == "__main__":
s = Solution()
print s.totalNQueens(8)