最近科研没头绪,写写leetcode缓缓,主要学python了,之前python只是看别人的代码,还没自己写过,果然不同
N皇后也算经典题目了,写的时候倒也没那么顺利,没搞懂列表和普通变量复制的区别,也算加深印象了
皇后1
class Solution(object):
def solveNQueens(self, n):
Nqunens=[]
def fd(m,l):
if m==n:
nq=[]
for i in range(n):
s=""
for j in range(n):
if l[i]==j:
s=s+"Q"
else:
s=s+"."
nq.append(s)
Nqunens.append(nq)
else:
for i in range(n):
if isok(i,l)==True:
nl=l[:]
nl.append(i)
fd(m+1,nl)
def isok(a,l):
for i in range(len(l)):
if l[i]==a:
return False
if len(l)-i==a-l[i] or l[i]-a==len(l)-i:
return False
return True
nnl=[]
fd(0,nnl)
return Nqunens
皇后2
class Solution(object):
def totalNQueens(self, n):
def fd(m,l):
if m==n:
return 1
else:
sum=0
for i in range(n):
if isok(i,l)==True:
nl=l[:]
nl.append(i)
sum+=fd(m+1,nl)
return sum
def isok(a,l):
for i in range(len(l)):
if l[i]==a:
return False
if len(l)-i==a-l[i] or l[i]-a==len(l)-i:
return False
return True
nnl=[]
return fd(0,nnl)