题目:给定一个整数 n,返回 n 皇后不同的解决方案的数量。

来源:https://leetcode-cn.com/problems/n-queens-ii/

法一: 自己的代码  时间超过百分之90

思路: 奇数和偶数分别计算,偶数直接利用对称性,奇数要特别计算第一行中间的列

class Solution:
def totalNQueens(self, n: int) -> int:
results = [0]
def backtrack(half_col,row=-1,col=0, ):
# 回溯终止条件,如果到最后一行了,说明找到一个解了,存储
if row == n-1:
# solution = []
# for _, col in sorted(queens):
# solution.append('.' * col + 'Q' + '.' * (n - col - 1))
# results.append(solution)
# print(results)
results[0] = results[0] + 1
return
row += 1
if (row == 0):
# 第一行由于对称,所以n为奇数的时候,只遍历一半的列
for col in half_col:
if cols[col] + p[col+row] + q[col-row] == 0:
queens.add((row,col))
cols[col] = 1
p[col+row] = 1
q[col-row] = 1
backtrack(half_col,row,col)
queens.remove((row,col))
cols[col] = 0
p[col + row] = 0
q[col - row] = 0
else:
for col in range(n):
if cols[col] + p[col+row] + q[col-row] == 0:
queens.add((row,col))
cols[col] = 1
p[col+row] = 1
q[col-row] = 1
# 这里特别要注意参数的传递,位置参数必须传递
# backtrack(row,col) 这是原先错误写法
backtrack(half_col,row,col)
queens.remove((row,col))
cols[col] = 0
p[col + row] = 0
q[col - row] = 0
cols = [0] * n
p = [0] * (2*n - 1)
q = [0] * (2*n - 1)
queens = set()
if n % 2 == 0:
backtrack(half_col=range(int(n/2)))
return results[0] * 2
# 当n为奇数的时候,遍历完一半的列后,还要遍历中间的列
else:
backtrack(half_col=range(int(n/2)))
results[0] = results[0] * 2
# 注意这里n为奇数时,中间的数是int(n/2)
backtrack(half_col=[int(n/2)])
return results[0]
if __name__ == '__main__':
duixiang = Solution()
ww = duixiang.totalNQueens(1)
print('结果是:', ww)

52N皇后II的更多相关文章

  1. 【leetcode-51,52】 N皇后,N皇后 II

     N皇后(hard) n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后问题 ...

  2. Leetcode之回溯法专题-52. N皇后 II(N-Queens II)

    Leetcode之回溯法专题-52. N皇后 II(N-Queens II) 与51题的代码80%一样,只不过52要求解的数量,51求具体解,点击进入51 class Solution { int a ...

  3. Java实现 LeetCode 52 N皇后 II

    52. N皇后 II n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回 n 皇后不同的解决方案 ...

  4. leetcode 51. N皇后 及 52.N皇后 II

    51. N皇后 问题描述 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后 ...

  5. [Swift]LeetCode52. N皇后 II | N-Queens II

    The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens ...

  6. 52. N-Queens II N皇后II

    网址:https://leetcode.com/problems/n-queens-ii/ 方法1:按照逻辑思路,通过回溯法解决问题.速度较慢! class Solution { public: vo ...

  7. LeetCode(52):N皇后 II

    Hard! 题目描述: n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回 n 皇后不同的解决方 ...

  8. 八皇后II

    用一个数组state记录已经选择的每一行皇后所在的位置,DFS count = 0 N = 8 state = [0]*N def dfs(row): global count for col in ...

  9. [LeetCode] 52. N皇后 II

    题目链接 : https://leetcode-cn.com/problems/n-queens-ii/ 题目描述: n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间 ...

随机推荐

  1. Linux部署java和tomcat的运行环境

    Linux部署java和tomcat的运行环境 1.上传下载的jdk的rpm包和tomcat的tar包,我是放到/opt目录了,文件直接去官网下载即可. 2.如果之前安装过其他版本的jdk,最好先现在 ...

  2. 关于Linux系统下基于Tomcat部署和升级war包的详细过程

    1.首先Linux先安装java,Tomcat 中间件规范要求: 1)         软件必须下载到/services/download_soft_v        --------(用xftp上传 ...

  3. 读《JavaScript面向对象编程指南》(二)

    第五章 原型 在JavaScript中,所有函数都会拥有一个 prototype 的属性,默认初始值为空对象. 可以在相关的原型对象中添加新的方法和属性,甚至可以用自定义对象来完全替换掉原有的原型对象 ...

  4. maven项目引入外部jar包

    方式1:dependency 本地jar包 <dependency> <groupId>com.hope.cloud</groupId> <!--自定义--& ...

  5. k8s master节点添加kubectl的使用

  6. chromedriver.exe,自动化web, 安装谷歌驱动,以及可能遇到的坑

    1.下载谷歌驱动:chromedriver.exe http://chromedriver.storage.googleapis.com/index.html (下载驱动的链接) 2.把下载的chro ...

  7. OpenCV笔记(3)(Canny边缘检测、高斯金字塔、拉普拉斯金字塔、图像轮廓、模板匹配)

    一.Canny边缘检测 Canny边缘检测是一系列方法综合的结果.其中主要包含以下步骤: 1.使用高斯滤波器,平滑图像,滤除噪声. 2.计算图像中每个像素点的梯度强度和方向. 3.应用非极大值抑制(N ...

  8. BZOJ 3940 Censoring ( Trie 图 )

    题目链接 题意 : 中文题.点链接 分析 : 直接建 Trie 图.在每一个串的末尾节点记录其整串长度.方便删串操作 然后对于问询串.由于可能有删串操作 所以在跑 Trie 图的过程当中需要拿个栈记录 ...

  9. py脚本修改后自动重启

    在用socket.io, pika之类启动一个脚本死循环做server或者client的时候: 1脚本被编辑之后,是不会自动重启 2当代码报错的时候,会立即退出, 只能手动重新运行 python ap ...

  10. ABI与ARM,X86的概念

    Android系统目前支持以下七种不同的CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2 ...