题目:给定一个整数 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. 表单的 submit 和 onsubmit 的用法 与区别

    submit与onsubmit 发生顺序:onsubmit -> submit 1.阻止表单提单: <script>function submitFun(){    //逻辑判断   ...

  2. 咕qwq

    ccsp回来之后一直肚子难受,到现在还没好. 下午去人民医院急诊做了个CT,医生说是有问题的,但她看不出来,让我明天早起挂专家号去QAQ. UPD:初步诊断是胀气.医生让我先吃两天抗生素...

  3. backtop返回页面顶部jquery代码

    <div id="toTop" style="width:30px;height:110px;border:1px solid #74B9DC; border-ra ...

  4. BZOJ1791 基环树直径

    非递归版4S /************************************************************** Problem: 1791 User: 18357 Lan ...

  5. Linux基本命令之Vim

    在vim,vi,gedit编辑器中显示行号:        在命令模式下:set nu 取消行号:set nonu 参照博客:https://www.cnblogs.com/Mr0wang/p/728 ...

  6. 【每日一包0001】is-sorted

    github地址:https://github.com/ABCDdouyae... is-sorted 用于判断数组是否被排序了 文档地址:https://www.npmjs.com/package/ ...

  7. linux 查找某文件所在路径

    find 路径 -name 文件名 例如:find / -name logo_web.png  查找/路径下logo_web.png文件路径 如果为非root账号可用 sudo find / -nam ...

  8. vs2017 2019 下载更新慢的解决方法

    国庆期间 下载的速度只有20多kb. 1.去掉网络适配器里面的 ip6勾选. 2.修改电脑的自动dns, 修改为1.1.1.1  , 修改为8.8.8.8  更快. 记得禁用再启用网络: dns为1. ...

  9. C# 匿名对象 增加属性

    dynamic data = new System.Dynamic.ExpandoObject(); IDictionary<string, object> dictionary = (I ...

  10. JDK、JRE和JVM的区别与相互之间的联系

    工作这么久,好多时间都在研究一些并发.多线程.分布式.框架等这些东西,但是前几天突然被人问到jdk.jre.jvm的区别与联系,瞬间觉得一脸懵逼,感觉还是有必要重新整理一下一些比较基本的java知识了 ...