https://leetcode.com/problems/n-queens/

才发现这么经典的题目之前并没有真正写过。

不同行,不同列,不同对角线。

不同行:直接每行一个。

不同列:set储存哪些列被占用了。其实最好用list[bool]来做。

不同对角线:如果挨个check前面的可能性,那么不就成了n^3的解法了吗。但是你想一下,对角线就是/这样子的有2*n个,\这样子的有2*n个,每选定一个点就会占据两条对角线,于是乎,也能用set或者list[bool]来做。

今日份长进:

在写递归的时候,会在进入下一层递归前后各写一个维护state的变量组,如下:

s,path都要围绕着递归函数。

其实可以有种简洁,却费空间的方法,就是传一份复制的给下一层,如下:

这样会省代码,费空间,学习了。

代码:

class Solution:def path2list(self,p):ans=[]for i in p:ans.append('.'*i+'Q'+'.'*(len(p)-i-1))return ansdef node(self,n,s,ans,path=[],r=-1):r+=1if r==n:ans.append(self.path2list(path))returnfor i in range(n):if r+i in s[0] or r-i in s[1] or i in s[2]:continues[0].add(r+i)s[1].add(r-i)s[2].add(i)path.append(i)self.node(n,s,ans,path,r)s[0].remove(r+i)s[1].remove(r-i)s[2].remove(i)path.pop()def solveNQueens(self, n):s=[set(),set(),set()]ans=[]self.node(n,s,ans)return ans

转载于:https://www.cnblogs.com/waldenlake/p/10249539.html

lc 51. N-Queens相关推荐

  1. 2018 ucla计算机排名,2018福布斯最具价值美国大学排名:加州UCLA位列榜首!

    对于美国留学的申请来说,也许大家在选校过程中都会比较倾向于USNEWS的院校排名榜.但是,怎样从多方面更多的了解你想要选择的学校呢?美国著名的权威财经杂志<福布斯>根据净价格.净债务.校友 ...

  2. LeetCode github集合,附CMU大神整理笔记

    Github LeetCode集合 本人所有做过的题目都写在一个java项目中,同步到github中了,算是见证自己的进步.github目前同步的题目是2020-09-17日之后写的题.之前写过的题会 ...

  3. LeetCode开心刷题二十七天——51. N-Queens

    Bonus: const修饰的i我们称之为符号常量.即,i不能在其他地方被重新赋值了.注意:const int i与int const i是等价的 51. N-Queens Hard 104047Fa ...

  4. 51单片机期末课程作业之蓝牙、操控、测速、里程小车

    文章底部附源码 课程设计报告 学 科:单片机原理及应用 项 目:里程记录仪 学 院: 专业.年级: 指导老师: 摘要 设计首先实现对小车行驶时的平均速度.即时速度以及里程等行驶参量的实时测量和显示功能 ...

  5. 51单片机学习笔记(清翔版)(19)——串口通信

    学好了中断再学串口通信 今天这课内容是关于数据传输的,在工业控制和商业控制是很重要的.数据传输包含串口.并行通信. 这里说的计算机都可以理解为单片机,因为工作方式是一样的. 单片机通信是指单片机之间, ...

  6. 基于51单片机的简易电梯系统的设计

    系统概述 设计要求 根据所学的知识以及技能,利用MCS-51系列单片机为中心设计一个简易电梯系统,实现四层电梯的无故障运行,并用数码管和指示灯显示对应楼层和运行方向等基本信息.设计所用的单片机为STC ...

  7. 日拱一卒——LeetCode 51.N皇后

    ​ 大家好呀,今天是今天为大家带来的LeetCode的题目是LeetCode 51.N皇后问题,算是一道很经典的题目,也是一道难度不低的题目,但是只要我们掌握并理解了判断的逻辑,并且在代码编写上进行注 ...

  8. 《uCOS51移植心得》---七年前之《快快乐乐跟我学51单片机操作系统和IP栈》

    http://www.amobbs.com/forum.php?mod=viewthread&tid=3396563 <uCOS51移植心得>---七年前之<快快乐乐跟我学5 ...

  9. 51单片机课设——模拟电梯控制系统

    基于51单片机的模拟电梯控制系统 利用51单片机模拟5层电梯控制系统,还原真实生活场景.当某层被按下呼梯按键(电梯厢外)时,电梯将运行到该楼层,同时步进电机模拟电梯运转,液晶显示屏实时显示楼层数及电梯 ...

  10. lc谐振计算机网络,LC谐振网络工作模式分析

    最近,为了降低无源元件的尺寸并获得快速动态响应,驱动频率已被提高至MHz的数量级.但驱动频率越高,开关损耗就越大.随着开关频率不断增加,MOSFET的开关损耗将超过导通损耗.特别是由于功率器件是在最高 ...

最新文章

  1. URAL 1011 Conductors
  2. SQL Server 2005即将终止服务 你准备好了么?
  3. 如何防止果照外泄?自己先上传就OK!扎克伯格这波操作给网友整不会了
  4. 小猿圈零基础怎样学好java?
  5. ustc小道消息20220104
  6. linux文件编程(3)—— main函数传参、myCp(配置成环境变量)、修改配置文件、整数和结构体数组写到文件
  7. FreeEIM 小插件 dwzjzx v2.1001 2013 下载
  8. EasyUI-在iframe里获取现阶段选中的tab的标题
  9. 【AAAI会议】三位教父上演神仙打架,Hinton吐槽CNN就是个“垃圾”
  10. 计算机知识技能大赛主持稿,计算机知识技能大赛.doc
  11. 【PMP】PMBOK 笔记 第11章 项目风险管理
  12. Matlab如何提取fig文件中的数据
  13. 看板记录工具wekan
  14. 回复和评论功能的实现
  15. springcloud后端集成支付宝支付踩坑记
  16. 在linux运行php文件
  17. 分享如何搭建手机工作室网络
  18. 未受信任的企业级开发者_在 iOS 上安装自定企业级应用
  19. 故宫博物馆爬虫(简略版)
  20. 树形DP·1771仓库选址

热门文章

  1. 拓端tecdat|python3用ARIMA模型进行时间序列预测
  2. 拓端tecdat|matlab从ECG信号数据趋势项的消除
  3. 拓端tecdat|R语言使用ARIMA模型预测股票收益时间序列
  4. 2021年3月计算机语言排名,2021年3月编程语言排行榜:TOIBE将迎来重大改变,SQL如愿挤进前十...
  5. vue 使用了浏览器的刷新之后报错_98、解决vue-cli3项目运行时sockjs报错问题
  6. 用开关控制蜂鸣器_蜂鸣器驱动电路(实践出真理)
  7. Error mounting /dev/sdc1 at /media/XXXX: Command-line `mount -t “ntfs“ -o
  8. Keras ImageDataGenerator参数
  9. Ubuntu16.04下Hadoop+Hive+HBase安装部署实践
  10. Python实现交通标志牌(GTSRB数据集)解析处理