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 的棋盘上,并且使皇后彼此之间 ...
随机推荐
- C++中写文件ofstream 的<< 操作符 与C风格的fwrite 的笔记
在某次工作中,调用了某SDK接口,该接口通过一个回调函数返回需要的内容.我们需要的内容是H.264码流,该码流通过一个unsigned char* 变量带回,另外还有一个长度 int length.为 ...
- Linux工具之netstat
1.简介 Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicas ...
- 关于cli打包至服务器出现的BUG(样式错乱,路径出错)解决方案
很久没来博客园了,今天给大家带来两个硬货bug,前端大牛可能不觉得是啥,但是对于没碰到过这问题的小菜鸟我来说还是很不错的 1.npm run build 至服务端的时候出现路径报错解决方案 ①.本地测 ...
- Steiner tree
Gym - 101908J Joining Capitals #include<bits/stdc++.h> using namespace std; typedef long long ...
- Django学习系列17:在模板中渲染待办事项
前面提到的问题中在表格中显示多个待办事项 是最后一个容易解决的问题.要编写一个新单元测试,检查模板是否也能显示多个待办事项: lists/tests.py def test_displays_all_ ...
- 《编译原理》求 FIRSTVT 集和 LASTVT 集的步骤 - 例题解析
<编译原理>求 FIRSTVT 集和 LASTVT 集的步骤 - 例题解析 算符优先关系表的构造中涉及到求 FIRSTVT 集和 LASTVT 集. 表示及含义: FIRSTVT(T) 非 ...
- monkey命令大全
一.认识monkey Monkey 就是SDK中附带的一个工具.Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中: 它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入 ...
- 如何优雅高效的写博客(Sublime + Markdown + Evernote)
如何优雅高效的写博客(Sublime + Markdown + Evernote) 本文主要是参照了几位大神的博客加上自己捣鼓了半天,比较适合新手流畅阅读 非常感谢下面两位大神: @dc_726: h ...
- java 学习笔记(四) java连接ZooKeeper
public class Demo2 { public static void main(String[] args) { String connectString = "192.168.1 ...
- dlopen用法
1. 包含头文件 #include<dlfcn.h> 2. 函数定义 void * dlopen(const char* pathName, int mode); pathName 指的 ...