1. 程式人生 > >leetcode 51 -N皇后

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)