leetcode:面试题 08.12. 八皇后【dfs + backtrack】
分析
定义一个函数生成当前queens的结果
然后queens用来记录每行的queen分别在什么位置
backtrack用来记录当前第i行的queen的位置在哪
如果当前i = n就可以加入最终的结果了
否则开始遍历每个j,如果当前的ij满足cols diag1 和 diag2就可以取这个j
然后设定queen 并加入三个set
然后dfs下一层 再回溯为之前的set 再遍历下一个j
ac code
class Solution:def solveNQueens(self, n: int) -> List[List[str]]:# backtrack + setrow = ['.'] * nqueens = [-1] * ncols, diag1, diag2 = set(), set(), set()ans = []def generateBoard():board = []for i in range(n):row[queens[i]] = 'Q'board.append(''.join(row))row[queens[i]] = '.'return boarddef backtrack(i):if i == n:ans.append(generateBoard())else:# next row which colfor j in range(n):if j in cols or i + j in diag1 or i - j in diag2:continue# dfs + backtrackqueens[i] = jcols.add(j)diag1.add(i + j)diag2.add(i - j)backtrack(i + 1)cols.remove(j)diag1.remove(i + j)diag2.remove(i - j)backtrack(0)return ans
总结
dfs + backtrack的复杂度并不是n的n次方 中间剪枝了不少的
复杂度是o(N!)
leetcode:面试题 08.12. 八皇后【dfs + backtrack】相关推荐
- LeetCode —— 面试题 08.12. 八皇后(Python)
设计一种算法,打印 N 皇后在 N × N 棋盘上的各种摆法,其中每个皇后都不同行.不同列,也不在对角线上.这里的"对角线"指的是所有的对角线,不只是平分整个棋盘的那两条对角线. ...
- leetcode面试题 08.12. 八皇后(回溯)
设计一种算法,打印 N 皇后在 N × N 棋盘上的各种摆法,其中每个皇后都不同行.不同列,也不在对角线上.这里的"对角线"指的是所有的对角线,不只是平分整个棋盘的那两条对角线. ...
- Leetcode 面试题 08.01. 三步问题
Leetcode 面试题 08.01. 三步问题 1.问题分析 2.问题解决 3.总结 1.问题分析 题目链接:https://leetcode-cn.com/problems/three-steps ...
- LeetCode 面试题 08.01. 三步问题 (动态规划)
面试题 08.01. 三步问题 解法1(动态规划) 分析出递推式:f(n) = f(n - 1) + f(n - 2) + f(n - 3) class Solution {public int wa ...
- LeetCode 面试题 08.11. 硬币 多种解法 完全背包问题
面试题 08.11. 硬币 大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博客地址为:亓官劼的博客 本文原创为亓官劼,请大家支持原创,部 ...
- [Leetcode] 面试题 08.02. 迷路的机器人
[面试题 08.02. 迷路的机器人] 设想有个机器人坐在一个网格的左上角,网格 r 行 c 列.机器人只能向下或向右移动,但不能走到一些被禁止的网格(有障碍物).设计一种算法,寻找机器人从左上角 ...
- leetcode面试题 04.12. 求和路径(dfs)
给定一棵二叉树,其中每个节点都含有一个整数数值(该值或正或负).设计一个算法,打印节点数值总和等于某个给定值的所有路径的数量.注意,路径不一定非得从二叉树的根节点或叶节点开始或结束,但是其方向必须向下 ...
- 【亡羊补牢】挑战数据结构与算法 第18期 LeetCode 面试题 08.08. 有重复字符串的排列组合(递归与回溯)
仰望星空的人,不应该被嘲笑 题目描述 有重复字符串的排列组合.编写一种方法,计算某字符串的所有排列组合. 示例1: 输入:S = "qqe"输出:["eqq", ...
- leetcode —— 面试题 17.12. BiNode
二叉树数据结构TreeNode可用来表示单向链表(其中left置空,right为下一个链表节点).实现一个方法,把二叉搜索树转换为单向链表,要求值的顺序保持不变,转换操作应是原址的,也就是在原始的二叉 ...
最新文章
- 121-Best Time to Buy and Sell Stock
- 重构技巧分别能够解决哪些代码味道
- 【OpenCV 4开发详解】漫水填充法
- Task04——零基础入门NLP - 基于深度学习的文本分类1
- 【宽搜】XMU 1039 Treausure
- 双链集合添加删除算法
- Redis的五大数据类型
- 应用在核电站DCS系统的代码自动生成工具ModelCoder
- ionic2 问题整理汇总
- 基于Python实现的遗传算法求TSP问题
- mysql实现火车购票系统_火车票购票系统的设计与实现(MyEclipse,MySQL)
- HDU/4585/ Shaolin STL中map应用
- python使用numpy的np.mod函数计算numpy数组除以某一特定数值剩余的余数(remainder)、np.mod函数和np.fmod函数对负值的处理方式有差异
- 工业企业产值产量电子台账操作指南(第一版)
- 百度是如何给每个人免费提供2TB存储空间的?
- register while current state is RESUMED. LifecycleOwners must call register before they are STARTED.
- [PTA]实验7-2-6 打印杨辉三角
- 实时传输协议——RTP协议
- Try to become a quitter 学会放弃
- 《那些年啊,那些事——一个程序员的奋斗史》——14
热门文章
- 一张收款码,同时支持微信、云闪付、支付宝、信用卡支付
- Java打印实心菱形与空心菱形
- 《统计建模与R软件》第二章课后作业解题答案
- [原创]WIN8系统的远程桌面漏洞 利用QQ拼音纯净版实现提权
- android 模拟器 ROM RAM 空间设置
- 浪迹天涯king教你用elementui做复杂的表格,去处理报表数据(合并表头,合并表体行和列)
- grasemonkey ajax页面,Greasemonkey 中使用 GM_xmlhttpRequest 如何在 https 页面中加载 http 资源?...
- 第4章 JavaScript表达式与运算符
- notepad++怎么解决光标变成下划线的问题?
- Skimming, Locating, then Perusing: A Human-Like Framework for Natural Language Video Localization