python-leetcode-统计构造好字符串的方案数

2466. 统计构造好字符串的方案数 - 力扣(LeetCode)

这个问题可以用**动态规划(DP)**来解决,思路如下:


思路

1. 定义 DP 数组

dp[i] 表示长度为 i 的好字符串的个数

2. 状态转移方程
  • 我们可以在 dp[i] 的基础上添加 zero'0',得到 dp[i + zero]
  • 或者在 dp[i] 的基础上添加 one'1',得到 dp[i + one]

因此,状态转移方程为:dp[i]=dp[i−zero]+dp[i−one]

需要对 10^9 + 7 取模。

3. 初始化
  • dp[0] = 1,表示空字符串。
4. 目标
  • 我们要求 low ≤ i ≤ high 之间的所有 dp[i] 的总和。

代码实现

def countGoodStrings(low: int, high: int, zero: int, one: int) -> int:MOD = 10**9 + 7dp = [0] * (high + 1)dp[0] = 1  # 空字符串# 计算 dpfor i in range(1, high + 1):if i >= zero:dp[i] = (dp[i] + dp[i - zero]) % MODif i >= one:dp[i] = (dp[i] + dp[i - one]) % MOD# 计算 [low, high] 之间的总和return sum(dp[low: high + 1]) % MOD

复杂度分析

  • 时间复杂度:O(high)。
  • 空间复杂度:O(high)。

示例

输入
print(countGoodStrings(2, 3, 1, 2))
输出
5
解释

满足条件的字符串:

  • "00""11""01""10""001"

优化

由于 dp[i] 只依赖于前面的 dp[i-zero]dp[i-one],可以用一个变量存储 dp[low]dp[high] 之间的和,减少不必要的计算:

def countGoodStrings(low: int, high: int, zero: int, one: int) -> int:MOD = 10**9 + 7dp = [1] + [0] * highresult = 0for i in range(1, high + 1):if i >= zero:dp[i] = (dp[i] + dp[i - zero]) % MODif i >= one:dp[i] = (dp[i] + dp[i - one]) % MODif i >= low:result = (result + dp[i]) % MOD  # 直接求和return result

这样可以避免额外的 sum() 计算,使得代码更高效!🚀

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

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

相关文章

Java为什么是跨平台的

一、Java虚拟机(JVM)的抽象层作用 JVAM是Java跨平台的核心技术。Java代码编译后生成字节码(.class文件),这些字节码并非直接由操作系统执行,而是由JVM解释或编译为特定平台的机器码。 屏蔽底层差异:JVM为不同操作系统提供统一的运行时环境,开…

RuleOS:区块链开发的“破局者”,开启Web3新纪元

RuleOS:区块链开发的“破冰船”,驶向Web3的星辰大海 在区块链技术的浩瀚宇宙中,一群勇敢的探索者正驾驶着一艘名为RuleOS的“破冰船”,冲破传统开发的冰层,驶向Web3的星辰大海。这艘船,正以一种前所未有的姿…

python: DDD+ORM using oracle 21c

sql script: create table GEOVINDU.School --創建表 ( SchoolId char(5) NOT NULL, -- SchoolName nvarchar2(500) NOT NULL, SchoolTelNo varchar(8) NULL, PRIMARY KEY (SchoolId) --#主鍵 );create table GEOVINDU.Teacher ( TeacherId char(5) NOT NULL , TeacherFirstNa…

软考中级_【软件设计师】知识点之【数据库】

一、结构数据模型 结构数据模型是直接面向数据库的逻辑结构包括: 层次模型、网状模型、关系模型(主要学习)、面向对象模型层次模型: 是一个树结构一对多 网状模型: 是图结构多对多 关系模型 是一种二维表格结构 例如&…

【UCB CS 61B SP24】 Lecture 25 26 - Minimum Spanning Trees Directed Acyclic Graphs 学习笔记

本文首先介绍了图论中的另一个经典问题:最小生成树(MST),讲解并用 Java 实现了用于求解 MST 的两个经典算法 Prim 与 Kruskal;接着介绍并实现了有向无环图(DAG)与拓扑排序。 1. 最小生成树 1.…

Java源码:利用jdk的spi载入其他厂商Driver实现源码分析

Java源码:利用jdk的spi载入其他厂商Driver实现源码分析 前言:一、Java中的类加载器类型二、类加载器的作用时机三、类加载的过程四、引导类加载器:一、定义与职责二、实现方式三、加载过程与特性四、与其他类加载器的关系五、作用与意义 隐式…

可视化+图解:轻松搞定链表

链表(Linked list)是一种常用的数据结构,它由一系列节点组成,每个节点包含数据域和指针域。指针域存储了下一个节点的地址,从而建立起各节点之间的线性关系。 1、链表节点 1.1 节点构成 链表节点如下图所示&#xff…

HarmonyOS Next 属性动画和转场动画

HarmonyOS Next 属性动画和转场动画 在鸿蒙应用开发中,动画是提升用户体验的关键要素。通过巧妙运用动画,我们能让应用界面更加生动、交互更加流畅,从而吸引用户的注意力并增强其使用粘性。鸿蒙系统为开发者提供了丰富且强大的动画开发能力&…

C# 在Excel中插入和操作切片器-详解

目录 使用工具 C# 在Excel中插入切片器 插入切片器到透视表 插入切片器到表格 C# 在Excel中修改切片器 C# 删除Excel中的切片器 切片器(Slicer)是Excel中的一个强大工具,它提供了直观且交互式的方式来过滤数据。通过切片器,…

【Python修仙编程】(二) Python3灵源初探(7)

字典的修炼——修仙者的法宝库 师傅玄天真人在他面前摊开一本泛黄的法典,上面写着:“字典是修仙者存储法宝的仓库,能让你快速找到需要的宝贝。” “师傅,字典是啥玩意儿?”林羽挠挠头,一脸懵逼。 “字典…

SyntaxError: Illegal return statement

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…

GB28181视频监控流媒体平台LiveGBS如何自定义收流端口区间以便减少收流端口数或解决端口冲突问题

LiveGBS GB28181流媒体服务在接收视频的时候默认是使用30000-30249, webrtc流播放端口区间默认是UDP的30250-30500区间。有些网络环境不方便开放这么大的端口区间,下面介绍下如何修改配置这个区间。 从页面上修改这个区间,端口区间尽量设置大…

饮食 “巧调理”,缓解手抖有妙方

手抖,这一常见症状背后可能潜藏多种原因,无论是生理性紧张所致,还是病理性疾病引发,合理饮食都对缓解症状有积极意义。健康饮食能够为身体提供必要营养,助力神经系统稳定,从而在一定程度上改善手抖状况。 在…

利用 requestrepo 工具验证 XML外部实体注入漏洞

1. 前言 在数字化浪潮席卷的当下,网络安全的重要性愈发凸显。应用程序在便捷生活与工作的同时,也可能暗藏安全风险。XXE(XML外部实体)漏洞作为其中的典型代表,攻击者一旦利用它,便能窃取敏感信息、掌控服务…

考前冲刺,消防设施操作员考试最后一击

考前冲刺,消防设施操作员考试最后一击 考前冲刺阶段至关重要。首先要回归教材,快速浏览重点知识点,强化记忆。同时,对之前做过的错题进行集中复习,分析错误原因,避免在考试中再次犯错。进行全真模拟考试&a…

【javaEE】多线程(基础)

1.❤️❤️前言~🥳🎉🎉🎉 Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的…

【江科大STM32】TIM输入捕获模式PWMI模式测频率

一、输入捕获测频率 接线图: 测信号的输入引脚为PA6,信号从PA6进来,待测的PWM信号也是STM32自己生成的,输出引脚是PA0,所以接线这里直接用一根线将PA0引到PA6就可以了。 如果有信号发生器的话,也可以设置成…

第10章 metasploit(网络安全防御实战--蓝军武器库)

网络安全防御实战--蓝军武器库是2020年出版的,已经过去3年时间了,最近利用闲暇时间,抓紧吸收,总的来说,第10章开始学习利用metasploit渗透测试工具去打metasploit2虚拟机,本文我演示了metasploit端口扫描和…

AI绘画软件Stable Diffusion详解教程(8):图生图进阶篇(手绘修正)

本篇介绍一下图生图的涂鸦绘制模式。 效果和上一篇改变风格雷同,但是可以通过涂鸦的方式,在重绘时对涂鸦的部分进行替换,替换部分的图像参照正向提示词来生成。 一、进入图生图标签页 按箭头指示处,打开涂鸦绘制工作区。 二、涂…

mapbox高阶,结合threejs(threebox)添加三维球体

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️threebox Sphere静态对象二、🍀使用t…