Python|每日一练|数组|回溯|栈|树|双指针|单选记录:N 皇后|二叉树的前序遍历|四数之和

news/2024/4/25 18:53:51/文章来源:https://blog.csdn.net/Medlar_CN/article/details/129137123

1、N 皇后(数组,回溯)

皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。

每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q'  '.' 分别代表了皇后和空位。

 

示例 1

https://img-service.csdnimg.cn/img_convert/cc74a8b59b9a8fe64bb7a741774c2ad1.jpeg

输入:n = 4
输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]
解释:如上图所示,4 皇后问题存在两个不同的解法。

示例 2

输入:n = 1
输出:[["Q"]]

 

提示:

  • 1 <= n <= 9
  • 皇后彼此不能相互攻击,也就是说:任何两个皇后都不能处于同一条横行、纵行或斜线上。

以下程序实现了这一功能,请你填补空白处内容:

class Solution(object):def solveNQueens(self, n):if n == 0:return 0res = []board = [['.'] * n for t in range(n)]self.do_solveNQueens(res, board, n)return resdef do_solveNQueens(self, res, board, num):if num == 0:res.append([''.join(t) for t in board])returnls = len(board)pos = ls - numcheck = [True] * lsfor i in range(pos):for j in range(ls):if board[i][j] == 'Q':______________________;for j in range(ls):if check[j]:board[pos][j] = 'Q'self.do_solveNQueens(res, board, num - 1)board[pos][j] = '.'
if __name__ == '__main__':s = Solution()print (s.solveNQueens(4))

选项代码:

                        check[j] = Falsestep = pos - iif j + step < ls:check[j + step] = Falseif j - step >= 0:check[j - step] = Falsebreak

2、二叉树的前序遍历(栈,树)

给你二叉树的根节点 root ,返回它节点值的 前序 遍历。

 

示例 1

https://img-service.csdnimg.cn/img_convert/93c03b302d4108b3debe3c473af634ea.jpeg

输入:root = [1,null,2,3] #这里输入应改为Nonepython中没有null

输出:[1,2,3]

示例 2

输入:root = []

输出:[]

示例 3

输入:root = [1]

输出:[1]

示例 4

https://img-service.csdnimg.cn/img_convert/428ab6a3e4c104cf4b41ad1a1a0a6f24.jpeg

输入:root = [1,2]

输出:[1,2]

示例 5

https://img-service.csdnimg.cn/img_convert/67437fd84487294f797443df319c90e9.jpeg

输入:root = [1,null,2]   #这里输入应改为Nonepython中没有null

输出:[1,2]

 

提示:

  • 树中节点数目在范围 [0, 100] 
  • -100 <= Node.val <= 100

 

进阶:递归算法很简单,你可以通过迭代算法完成吗?

选项代码:

class TreeNode:def __init__(self, x):self.val = xself.left = Noneself.right = Noneclass Solution:def __init__(self):self.ans = []def preorderTraversal(self, root: TreeNode) -> List[int]:if not root:return []self.ans.append(root.val)self.preorderTraversal(root.left)self.preorderTraversal(root.right)return self.ans

3、四数之和(数组,双指针)

给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 ab d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。

注意:答案中不可以包含重复的四元组。

 

示例 1

输入:nums = [1,0,-1,0,-2,2], target = 0
输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]

示例 2

输入:nums = [], target = 0
输出:[]

 

提示:

  • 0 <= nums.length <= 200
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109

请在以下选项中选择

选项代码:

class Solution(object):def fourSum(self, nums, target):""":type nums: List[int]:type target: int:rtype: List[List[int]]"""nums.sort()results = []N = len(nums)i = 0while i < N-3:if i > 0 and nums[i] == nums[i-1]:i += 1continuej = i+1while j < N-2:if j > i+1 and nums[j] == nums[j-1]:j += 1continuek = j+1l = N-1while k < l:if k > j+1 and nums[k] == nums[k-1]:k += 1continuewhile k < l and (target - nums[i] - nums[j] - nums[k] - nums[l]) < 0:l -= 1if k >= l:breakif target == nums[i] + nums[j] + nums[k] + nums[l]:results.append([nums[i],nums[j],nums[k],nums[l]])k += 1j += 1i += 1return results
# %%
s = Solution()
print(s.fourSum(nums = [1,0,-1,0,-2,2], target = 0))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_72166.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

操作系统真相还原_第6章:完善内核

文章目录6.1 函数调用约定简介6.2 汇编语言和C语言混合编程汇编调用CC调用汇编6.3 实现打印函数流程程序编译并写入硬盘执行6.4 内联汇编简介汇编语言AT&T语法基本内联汇编扩展内联汇编6.1 函数调用约定简介 调用约定&#xff1a; calling conventions 调用函数时的一套约…

「mysql是怎样运行的」第5章 盛放记录的大盒子---InnoDB数据页结构

「mysql是怎样运行的」第五章 盛放记录的大盒子—InnoDB数据页结构 文章目录「mysql是怎样运行的」第五章 盛放记录的大盒子---InnoDB数据页结构[toc]一、不同类型的页介绍二、数据页结构的快速浏览三、记录在页中的存储记录头信息的秘密四、Page Directory(页目录)五、Page He…

在ONLYOFFICE中借助ChatGPT一键创建招聘启事的内容

大家好&#xff0c;相信和多人都在生活中或工作中看到过招聘启示&#xff0c;或多或少都会有些了解。今天教大家在ONLYOFFICE中怎样通过chetGPT创建一份满意的招聘启示&#xff0c;下面是我用chatgpt制作的一份招聘信息&#xff0c;请大家看一下。 ONLYOFFICE ONLYOFFICE文档是…

(HP)新手引导使用react-shepherd

1&#xff0c;官方参数文档&#xff1a;https://shepherdjs.dev/docs/tutorial-02-usage.html 2&#xff0c;基本代码 import { ShepherdTour } from react-shepherd; import ./index.less; // 自己的样式文件&#xff0c;用来修改样式 import ./shepherd.less; // 将shephe…

C++性能白皮书

最近看完了《C性能白皮书》&#xff0c;这本书列出了一些性能优化的思路&#xff0c;不过只是一些指引&#xff0c;没有讲具体细节&#xff0c;我整理出了其中的关键点分享给大家&#xff1a; 硬件篇 作为一个程序员&#xff0c;想要性能优化&#xff0c;最好要了解些硬件&…

为什么redis的zset用跳跃表而不用b+ tree?

这两天有小伙伴问我一个问题&#xff0c;为什么redis的zset用跳跃表&#xff0c;不用b tree&#xff1f; 我先不说结论&#xff0c;我先说下 跳跃表 和Btree 。 跳跃表 在之前的 《redis源码阅读-zset》 中&#xff0c;已经详解了zset的使用跳跃表的源码&#xff0c;今天借用…

hadoop3.*集群搭建,小白必看

hadoop广义上讲是一个大数据生态圈&#xff0c;接受大量处理、处理大量数据的一个全套的框架&#xff01;hadoop3.x版本以后&#xff0c;主要有三大模块&#xff0c;HDFS、YARN、mapReduce这三大核心组成&#xff01;什么是HDFS?分布式文件系统&#xff0c;hadoop集群的功能类…

数值方法笔记4:插值、近似和拟合

1. 插值1.1 插值的一些概念1.1.1 插值的定义1.1.2 插值的存在性1.1.3 插值的误差分析1.2 拉格朗日插值(Lagrange Interpolation)1.2.1 拉格朗日插值误差分析1.3 Newton多项式插值1.3.1 Newton多项式插值误差分析1.4 Chebyshev多项式确定插值点1.4.1 Chebyshev多项式性质1.5 有理…

内存映射(1)

内存映射 将磁盘文件中的数据映射到内存&#xff0c;用户通过修改内存就能修改磁盘文件 相关的系统调用&#xff1a; void *mmap() 功能&#xff1a;将一个文件或设备的数据映射到内存中 参数&#xff1a; void *addr : NULL 由内核指定length : 要映射的数据长度&#xff0c;…

JUC并发编程——进程与线程

目录一、进程和线程的概念1.1 进程1.2 线程1.3 进程与线程对比二、并行和并发的概念三、线程基本应用3.1 多线程应用——异步调用一、进程和线程的概念 1.1 进程 ● 程序由指令和数据组成&#xff0c;但这些指令要运行&#xff0c;数据要读写&#xff0c;就必须将指令加载至 …

【Mysql系列】Mysql之ACID实现原理

ACID 原子性 事务不可分割&#xff0c;要么全部执行&#xff0c;要么都不执行。原理是使用undo log。undo log&#xff0c;当事务对数据库进行修改的时候&#xff0c;会生成对应的undo log。 持久性 事务提交后&#xff0c;对于数据库的改变是永久性的。实现原理通过redo l…

超详细解读!数据库表分区技术全攻略

更多内容可以关注微信公众号&#xff1a;老程序员刘飞 分区的定义 分区是一种数据库优化技术&#xff0c;它可以将大表按照一定的规则分成多个小表&#xff0c;从而提高查询和维护的效率。在分区的过程中&#xff0c;数据库会将数据按照分区规则分配到不同的分区中&#xff0…

排序算法-java实现

文章目录冒泡排序选择排序插入排序快速排序希尔排序冒泡排序 原理&#xff1a; 依次比较两个相邻的元素&#xff0c;如果它们顺序错误就把它们交换过来。 时间复杂度&#xff1a; 若文件的初始状态是正序的&#xff0c;一趟扫描即可完成排序。所需的关键字比较次数C和记录移…

graphviz:实现图文件的可视化

1. graphviz下载安装 参考的是这篇文章&#xff1a;https://blog.csdn.net/qq_37085158/article/details/126421102 graphviz的下载地址为&#xff1a;https://graphviz.org/download/ 2. graphviz的使用步骤 将edge文件转化成dot文件WinR&#xff0c;输入cmd&#xff0c;在…

linux rsync服务端安装和windows客户端备份

安装&#xff1a;yum install -y rsync 密码内容&#xff1a;zhangsan:123456 配置文件&#xff1a;/etc/rsyncd.conf内容 # /etc/rsyncd: configuration file for rsync daemon mode # See rsyncd.conf man page for more options. # configuration example: uid root gi…

LVGL Styles

LVGL StylesGet started按钮添加标签按钮添加风格滑动条值显示StylesSize stylesBackground stylesBorder stylesOutline stylesShadow stylesImage stylesArc stylesText stylesLine stylesGet started 按钮添加标签 /*** brief 按钮事件回调函数* param e */ void btn_eve…

网络有线无线配置

一、需求 在无线接入区内&#xff0c;当Lsw1的上联口出现故障时&#xff0c;需要通过AP1-LSw1-LSw2-LSw3的路径访问公网server3。这是因为AP1通过无线网连接到LSw1&#xff0c;而LSw1与LSw3之间的链路出现故障&#xff0c;无法直接访问公网server3。因此&#xff0c;流量需要通…

一文说清WMS系统与MES系统,SRM系统,ERP系统集成的好处

由于制造过程的多样性、复杂性、业务流程的多样性和复杂性&#xff0c;因此&#xff0c;制造企业的信息化系统包括WMS、SRM、MES等管理系统&#xff0c;但它们的管理方向却各不相同&#xff0c;例如WMS这个是管理仓库、 SRM是管理公司的供应商、 MES是管理车间的生产制造的等等…

决策树、随机森林、GBDT、XGBoost

文章目录 1. 引入 1.1 决策树1.2 随机森林1.3 GBDT(Gradient Boosting Decision Tree)梯度提升决策树1.4 XGBoost&#xff08;eXtreme Gradient Boosting&#xff09;极端梯度提升2. 代码实现 2.1 决策树&随机森林&GBDT&XGBoost 2.1.1 分类2.1.2 回归2.1.3 显示模…

SpringCloud(二)配置中心

配置中心Nacos配置中心多环境共享Nacos集群搭建Nacos配置中心 作用&#xff1a; 统一配置管理配置自动刷新&#xff0c;热更新 实现&#xff1a; 统一配置管理 在nacos服务端&#xff0c;配置管理配置列表中新建配置了解配置获取的步骤&#xff1a; 项目启动->读取nacos中…