- 回溯法解决,或者说是递归
- 出口是获得到的可行解长度和n一致,出口和正常逻辑是if else关系
- 如果满足要求,则temp的长度增加,然后增加新的约束,将temp和约束,以及需要用到的数据传入函数递归调用
- 调用完之后temp把新加入的pop出来,同时解除新增的约束
def __init__(self):
self.res = []
def solveNQueens(self, n):
"""
:type n: int
:rtype: List[List[str]]
"""
temp = []
col = [0] * n
pie = {}
na = {}
self.dfs(0, n, temp, col, pie, na)
return self.res
def dfs(self, i, n, temp, col, pie, na):
if len(temp) == n:
# 注意是[:]
self.res.append(temp[:])
else:
for j in range(n):
# 判断条件
if col[j] != 1 and (i+j) not in pie.keys() and (i-j) not in na.keys():
# temp长度增加
temp.append([i,j])
# 增加新的约束
col[j] = 1
pie[i+j] = True
na[i-j] = True
# 递归调用
self.dfs(i+1, n, temp, col, pie, na)
# pop出temp中新增的元素
temp.pop()
# 解除新增的约束
col[j] = 0
pie.pop(i+j)
na.pop(i-j)
转载于:https://www.jianshu.com/p/cf25d9379fe5