分析

定义一个函数生成当前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】相关推荐

  1. LeetCode —— 面试题 08.12. 八皇后(Python)

    设计一种算法,打印 N 皇后在 N × N 棋盘上的各种摆法,其中每个皇后都不同行.不同列,也不在对角线上.这里的"对角线"指的是所有的对角线,不只是平分整个棋盘的那两条对角线. ...

  2. leetcode面试题 08.12. 八皇后(回溯)

    设计一种算法,打印 N 皇后在 N × N 棋盘上的各种摆法,其中每个皇后都不同行.不同列,也不在对角线上.这里的"对角线"指的是所有的对角线,不只是平分整个棋盘的那两条对角线. ...

  3. Leetcode 面试题 08.01. 三步问题

    Leetcode 面试题 08.01. 三步问题 1.问题分析 2.问题解决 3.总结 1.问题分析 题目链接:https://leetcode-cn.com/problems/three-steps ...

  4. LeetCode 面试题 08.01. 三步问题 (动态规划)

    面试题 08.01. 三步问题 解法1(动态规划) 分析出递推式:f(n) = f(n - 1) + f(n - 2) + f(n - 3) class Solution {public int wa ...

  5. LeetCode 面试题 08.11. 硬币 多种解法 完全背包问题

    面试题 08.11. 硬币   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博客地址为:亓官劼的博客 本文原创为亓官劼,请大家支持原创,部 ...

  6. [Leetcode] 面试题 08.02. 迷路的机器人

    [面试题 08.02. 迷路的机器人]   设想有个机器人坐在一个网格的左上角,网格 r 行 c 列.机器人只能向下或向右移动,但不能走到一些被禁止的网格(有障碍物).设计一种算法,寻找机器人从左上角 ...

  7. leetcode面试题 04.12. 求和路径(dfs)

    给定一棵二叉树,其中每个节点都含有一个整数数值(该值或正或负).设计一个算法,打印节点数值总和等于某个给定值的所有路径的数量.注意,路径不一定非得从二叉树的根节点或叶节点开始或结束,但是其方向必须向下 ...

  8. 【亡羊补牢】挑战数据结构与算法 第18期 LeetCode 面试题 08.08. 有重复字符串的排列组合(递归与回溯)

    仰望星空的人,不应该被嘲笑 题目描述 有重复字符串的排列组合.编写一种方法,计算某字符串的所有排列组合. 示例1: 输入:S = "qqe"输出:["eqq", ...

  9. leetcode —— 面试题 17.12. BiNode

    二叉树数据结构TreeNode可用来表示单向链表(其中left置空,right为下一个链表节点).实现一个方法,把二叉搜索树转换为单向链表,要求值的顺序保持不变,转换操作应是原址的,也就是在原始的二叉 ...

最新文章

  1. 121-Best Time to Buy and Sell Stock
  2. 重构技巧分别能够解决哪些代码味道
  3. 【OpenCV 4开发详解】漫水填充法
  4. Task04——零基础入门NLP - 基于深度学习的文本分类1
  5. 【宽搜】XMU 1039 Treausure
  6. 双链集合添加删除算法
  7. Redis的五大数据类型
  8. 应用在核电站DCS系统的代码自动生成工具ModelCoder
  9. ionic2 问题整理汇总
  10. 基于Python实现的遗传算法求TSP问题
  11. mysql实现火车购票系统_火车票购票系统的设计与实现(MyEclipse,MySQL)
  12. HDU/4585/ Shaolin STL中map应用
  13. python使用numpy的np.mod函数计算numpy数组除以某一特定数值剩余的余数(remainder)、np.mod函数和np.fmod函数对负值的处理方式有差异
  14. 工业企业产值产量电子台账操作指南(第一版)
  15. 百度是如何给每个人免费提供2TB存储空间的?
  16. register while current state is RESUMED. LifecycleOwners must call register before they are STARTED.
  17. [PTA]实验7-2-6 打印杨辉三角
  18. 实时传输协议——RTP协议
  19. Try to become a quitter 学会放弃
  20. 《那些年啊,那些事——一个程序员的奋斗史》——14

热门文章

  1. 一张收款码,同时支持微信、云闪付、支付宝、信用卡支付
  2. Java打印实心菱形与空心菱形
  3. 《统计建模与R软件》第二章课后作业解题答案
  4. [原创]WIN8系统的远程桌面漏洞 利用QQ拼音纯净版实现提权
  5. android 模拟器 ROM RAM 空间设置
  6. 浪迹天涯king教你用elementui做复杂的表格,去处理报表数据(合并表头,合并表体行和列)
  7. grasemonkey ajax页面,Greasemonkey 中使用 GM_xmlhttpRequest 如何在 https 页面中加载 http 资源?...
  8. 第4章 JavaScript表达式与运算符
  9. notepad++怎么解决光标变成下划线的问题?
  10. Skimming, Locating, then Perusing: A Human-Like Framework for Natural Language Video Localization