leetcode 51 -N皇后
最近科研沒頭緒,寫寫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)