52N皇后II
题目:给定一个整数 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的更多相关文章
- 【leetcode-51,52】 N皇后,N皇后 II
N皇后(hard) n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后问题 ...
- Leetcode之回溯法专题-52. N皇后 II(N-Queens II)
Leetcode之回溯法专题-52. N皇后 II(N-Queens II) 与51题的代码80%一样,只不过52要求解的数量,51求具体解,点击进入51 class Solution { int a ...
- Java实现 LeetCode 52 N皇后 II
52. N皇后 II n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回 n 皇后不同的解决方案 ...
- leetcode 51. N皇后 及 52.N皇后 II
51. N皇后 问题描述 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后 ...
- [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 ...
- 52. N-Queens II N皇后II
网址:https://leetcode.com/problems/n-queens-ii/ 方法1:按照逻辑思路,通过回溯法解决问题.速度较慢! class Solution { public: vo ...
- LeetCode(52):N皇后 II
Hard! 题目描述: n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回 n 皇后不同的解决方 ...
- 八皇后II
用一个数组state记录已经选择的每一行皇后所在的位置,DFS count = 0 N = 8 state = [0]*N def dfs(row): global count for col in ...
- [LeetCode] 52. N皇后 II
题目链接 : https://leetcode-cn.com/problems/n-queens-ii/ 题目描述: n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间 ...
随机推荐
- 生产者消费者问题--synchronized
# 代码 public class App { public static void main(String[] args) { Depot depot = new Depot(100); Produ ...
- MST-prim ElogV
#include<bits/stdc++.h> #define ll long long using namespace std; ; ; struct node { int t;int ...
- XP系统登录界面,需要手动点击用户帐户后才会出现输入密码的界面
问题描述XP系统,用户帐户设置有密码.用户表示之前启动到系统登录界面,会直接出现输入密码的对话框(见图一):现在启动到登录界面只看到用户帐户信息,需手动点击用户名后才能出现输入密码的界面,用户感觉不方 ...
- Java HashMap的工作原理(转载)
原文地址:http://www.importnew.com/10620.html 面试的时候经常会遇见诸如:"java中的HashMap是怎么工作的","HashMap的 ...
- 区块链——java实现
简述 本文主要的内容试一次关于区块链的作业,本次作业中有很多地方和实际的区块链不符合,比如hash,本文实现的区块链只是用了区块本身的hash并没去区分,头部和数据部分.仅供参考学习. 介绍 内容有点 ...
- pidstat 命令详解(转载)
转自https://www.jianshu.com/p/3991c0dba094 pidstat 概述 pidstat是sysstat工具的一个命令,用于监控全部或指定进程的cpu.内存.线程.设备I ...
- JVM启动参数大全及默认值
Java启动参数共分为三类: 其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容: 其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足, ...
- VM删除快照失败,磁盘空间不足,只是删除了快照名字(全网唯一解决办法)
原创: 删除之前的快照,发现只是把名字删除了, 看着这么多文件也不知道怎么删,一顿百度google也是没找到答案 于是就自己琢磨 因为删除快照的时候,是先把快照删除,然后删除无效的文件 所以先让这个盘 ...
- XML的树结构与语法规则
㈠概念 什么是 XML? ⑴XML 指可扩展标记语言(EXtensible Markup Language) ⑵XML 是一种标记语言,很类似 HTML ⑶XML 的设计宗旨是传输数据,而非显示数据 ...
- maven安装问题解决
出现: The JAVA_HOME environment variable is not defined correctly This environment variable is needed ...