zoukankan      html  css  js  c++  java
  • [LeetCode]题解(python):052-N-Queens II


    题目来源

    https://leetcode.com/problems/n-queens-ii/

    Follow up for N-Queens problem.

    Now, instead outputting board configurations, return the total number of distinct solutions.


    题意分析


    Input: n

    Output: n of number of the result

    Conditions:n 皇后问题,但是返回数目


    题目思路


    上题采用递归方法,这次采用非递归方法做,主要是弄清楚非递归什么时候回溯即可。同上题,采用一维数组存储第i行的位置,然后每一次判断条件也是跟上题一样(一维表示不会同行,board[i] != board[j]表示同列,abs(i- j)!= abs(list[i] - list[j])表示不会同斜线)。

    回溯的方法是,如果在本行没找到把row -= 1,然后把board[row] = -1(注意row已经更新了),col = board[row] + 1(从新的一行的已有结果的下一列开始找)

    row的判断:

    当row等于0并且还需要回溯时,即可终止寻找

    当row等于n-1时,此时说明有一个答案(前提是这一行已经找到了)


    AC代码(Python)


     1 __author__ = 'YE'
     2 
     3 class Solution(object):
     4     def totalNQueens(self, n):
     5         """
     6         :type n: int
     7         :rtype: int
     8         """
     9         def check(k, j):
    10             for i in range(k):
    11                 if board[i] == j or abs(k - i) == abs(board[i] - j):
    12                     return False
    13             return True
    14 
    15         board = [-1 for i in range(n)]
    16 
    17         row = 0
    18         col = 0
    19         count = 0
    20 
    21 
    22         while row < n:
    23             while col < n:
    24                 if check(row, col):
    25                     board[row] = col
    26                     col = 0
    27                     break
    28                 else:
    29                     col += 1
    30             if board[row] == -1:
    31                 if row == 0:
    32                     break
    33                 else:
    34                     row -= 1
    35                     col = board[row] + 1
    36                     board[row] = -1
    37                     continue
    38             if row == n - 1:
    39                 count += 1
    40                 col = board[row] + 1
    41                 board[row] = -1
    42                 continue
    43             row += 1
    44         return count
    45 
    46 
    47 
    48 n = 4
    49 print(Solution().totalNQueens(n))
  • 相关阅读:
    【Python基础知识】【语法】【入门】
    linux-记录一次VMWare安装linux的问题
    mysql-记录一次CentOS7压缩包安装mysql的过程
    java-记录一次新服务器搭建网站过程
    docker-mysql-记录一次中文乱码的问题。
    spring-事务总结
    spring-aop总结
    maven-spring-boot-first-version-learn编译运行的问题
    maven-导入4.0.0.BOOTSTRAP-SNAPSHOT遇到的问题。
    maven-添加spring-express snapshot版本依赖问题
  • 原文地址:https://www.cnblogs.com/loadofleaf/p/5082528.html
Copyright © 2011-2022 走看看