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 的棋盘上,并且使皇后彼此之间 ...
随机推荐
- linux内核驱动module_init解析(1)
本文转载自博客http://blog.csdn.net/richard_liujh/article/details/45669207 写过linux驱动的程序猿都知道module_init() 这个函 ...
- host文件介绍
默认位置为%SystemRoot%\system32\drivers\etc\,但也可以改变. 动态目录由注册表键\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSe ...
- 【转载】#pragma once与#ifndef
本篇随笔为转载,原贴地址:#pragma once与#ifndef解析 为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式.在 ...
- Sql service 分页存储过程
create database Exam_Week3 GO USE Exam_Week3 GO create table Classs ( ClaID ,), ClassName ), Counts ...
- 【CF208E】Blood Cousins
题目大意:给定一个 N 个点的森林,M 个询问,每次询问对于点 u 来说,有多少个点和 u 有相同的 K 级祖先. 题解:线段树合并适合处理子树贡献的问题. 发现要回答这个询问在点 u 处计算很困难, ...
- STM32的系统时钟设置SystemClock_Config()探究
一.首先了解几个硬件名词: stm32有多种时钟源,为HSE.HSI.LSE.LSI.PLL,对于L系统的,还有一个专门的MSI 1.HSE是高速外部时钟,一般8M的晶振,精度比较高,比较稳定. 2. ...
- c++11:lambda表达式的使用
lambda表达式的一般形式: [capture list] (parameter list) -> return type{function body}; 其中,capture list (捕 ...
- hdu_1712(dp,背包)
hdu_1712 \[dp[i][j]\] 表示前i个物品用了j天得到的最大收益 \[ dp[i][j] = max(dp[i-1][j],dp[i][j-k]+ k*v[i][k]) \qquad ...
- Spark 电子书
Spark最佳实践 (陈欢/林世飞著) 完整pdf扫描版[39MB]http://pan.baidu.com/s/1i4LNOVVSpark SQL编程指南 (Spark 官方文档翻译) 中文PDF版 ...
- 论文阅读:OpenFlow: Enabling Innovation in Campus Networks
摘要: 本白皮书提出了OpenFlow——研究人员在他们每天使用的网络中运行实验协议的一种方式. OpenFlow基于以太网交换机,具有内部流表以及用于添加和删除流条目的标准化接口.我们的目标是鼓励网 ...