• [leetcode]N-Queens II @ Python


    原题地址:https://oj.leetcode.com/problems/n-queens-ii/

    题意:和N-Queens这道题其实是一样的,只不过这次要求返回的时N皇后的解的个数的问题。

    解题思路:上道题使用了递归回溯的解法,这道题我们可以使用非递归回溯来解决,因为如果使用递归回溯来解决,那么代码和上道题几乎一样。在非递归的编程中,比较有技巧性的是如何来进行回溯。

    代码:

    class Solution:
        # @return an integer
        def totalNQueens(self, n):
            def check(k, j):  # check if the kth queen can be put in column j!
                for i in range(k):
                    if board[i]==j or abs(k-i)==abs(board[i]-j):
                        return False
                return True
            board=[-1 for i in range(n)]
            row=0; col=0; sum=0
            while row<n:
                while col<n:
                    if check(row, col):
                        board[row]=col
                        col=0
                        break
                    else:
                        col+=1
                if board[row]==-1:                  #如果为真,即为在这一行找不到位置放置皇后
                    if row==0:                    #如果在第0行也找不到位置放置皇后了,说明所有的情况已经迭代完毕了,执行break跳出操作。
                        break
                    else:
                        row-=1                                  #这条语句用来回溯到上一行
                        col=board[row]+1              #回溯到上一行时,皇后放置的位置要加1,也就是开始试验下一列
                        board[row]=-1                #然后将这一行的值重置为-1,也就是说要重新寻找皇后的位置了
                        continue
                if row==n-1:                     #当row==n-1时,说明最后一行的皇后位置也确定了,得到了一个解
                    sum+=1
                    col=board[row]+1
                    board[row]=-1
                    continue
                row+=1
            return sum
  • 相关阅读:
    microsoft.extensions.logging日志组件拓展(保存文本文件)
    Winform 窗体皮肤美化_IrisSkin
    MailKit/MimeKit 发送邮件
    Winform 美化
    HTML CSS布局定位
    Newtonsoft.Json使用技巧
    Javascript 日历插件
    非靜態初始化塊與夠着函數的 執行順序
    java中堆栈的功能作用 以及區別(搜集)
    Java中数据类型相互转化
  • 原文地址:https://www.cnblogs.com/zuoyuan/p/3747658.html
Copyright © 2020-2023  润新知