Leetcode做题日记:51. N皇后(PYTHON)

n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。

每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。

示例:

输入: 4
输出: [
[".Q…", // 解法 1
“…Q”,
“Q…”,
“…Q.”],

["…Q.", // 解法 2
“Q…”,
“…Q”,
“.Q…”]
]
解释: 4 皇后问题存在两个不同的解法。

第一次的代码:
既然是经典的算法问题,就好好的思考了一下算法。
每一行只能放一个皇后,那么只需要知道每一行皇后的x列坐标即可,那么先给定一个判断是否可行的函数,接下来,我采用一个列表来储存一个棋盘可行的皇后在每一行的列坐标,列表里每一个列坐标在这个列表中的位置,就是皇后的行坐标(因为存储皇后的顺序是从第一行(位置0行)开始的),最后用一个函数,将这些列坐标的位置依次放上Q

	def buchongtu(xu,nextx): #定义一个不冲突函数
            nexty=len(xu) #y坐标就是列表xu的长度,即要放皇后的新的那一行
                          #因为第一个皇后的行的第0行
            k=0 #判断与第k行皇后是否冲突
            for i in xu:
                if i+k==nextx+nexty: #第一种情况,这里的k表示以存在的皇后
                                     #的行坐标y
                    return False
                elif i-k==nextx-nexty: #第二种情况
                    return False
                elif i==nextx: #第三种情况
                    return False
                k+=1
            return True #都不冲突,返回True   
       
	 def queen(xulie,n,ans):
            if len(xulie)==n: #当储存满一个棋盘的时候
                ans.append(xulie) #将此棋盘加入列表ans中
                
            else: #如果还可以加皇后
                for i in range(n): #那么从新的一行开始,每一个位置
                                   #都尝试放皇后
                    if buchongtu(xulie,i): #如果这个位置不冲突
                        queen(xulie+[i],n,ans) #表明可以将这个位置(列坐标)
                                               #加入列表中,继续递归
        
        def daying(xulie,n): #定义一个函数,把皇后的坐标变成棋盘
            a=[]
            for j in xulie: #对棋盘中的每一个皇后坐标
                c=''
                i=0 #第i行
                while i <n:
                    if i==j: #在得到的坐标位置放Q
                        c+='Q'
                    else: #不在坐标位置的,放 点
                        c+='.'
                    i+=1   
                a.append(c) #得到棋盘    
            return a    
        
        aa=[]
        queen([],n,aa) 
        ans1=[]
        for i in aa: #可能存在多个棋盘   
            aaa=daying(i,n) #将多个棋盘储存在列表中
            ans1.append(aaa)
        return ans1

92ms,排名68%

你可能感兴趣的:(leetcode)