Leetcode---2466.统计构造好字符串的个数,70.爬楼梯

简介: 简单使用

动态规划五部

/* 动态规划五部曲:

  • 1.确定dp[i]的下标以及dp值的含义: 爬到第i层楼梯,有dp[i]种方法;
  • 2.确定动态规划的递推公式:dp[i] = dp[i-1] + dp[i-2];
  • 3.dp数组的初始化:因为提示中,1<=n<=45 所以初始化值,dp[1] = 1, dp[2] = 2;
  • 4.确定遍历顺序:分析递推公式可知当前值依赖前两个值来确定,所以递推顺序应该是从前往后;
  • 5.打印dp数组看自己写的对不对;

爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
思路:动态规划
当我们最后爬到楼顶时可能是一步,也可能是两步,我们列出f(x)=f(x−1)+f(x−2),
我们可以知道实际上爬到x层的方案就是爬到x-1层和x-2层的方案之和。
我们要讨论其中的边界值,爬到0级是一种方案,爬到1级只有一种方案,
则F[0]=1,F[1]=1

题目

给你整数 zero ,one ,low 和 high ,我们从空字符串开始构造一个字符串,每一步执行下面操作中的一种:

将 ‘0’ 在字符串末尾添加 zero 次。
将 ‘1’ 在字符串末尾添加 one 次。
以上操作可以执行任意次。

如果通过以上过程得到一个 长度 在 low 和 high 之间(包含上下边界)的字符串,那么这个字符串我们称为 好 字符串。

请你返回满足以上要求的 不同 好字符串数目。由于答案可能很大,请将结果对 109 + 7 取余 后返回。

分析

该题简单来说就是爬楼梯的换皮游戏。即是最后一次可以添加0也可以添加1,我们还可以列出
f[x]=f[x-zero]+f[x-one]
方程的意思是长度为i的字符串,可以由长度为i-one的字符串+one个1构成,也可以由长度为i-zero的字符串+zero个0构成。
class Solution:

def countGoodStrings(self, low: int, high: int, zero: int, one: int) -> int:
    MOD = 10 ** 9 + 7
    f = [1] + [0] * high  # f[i] 表示构造长为 i 的字符串的方案数,其中构造空串的方案数为 1,
    for i in range(1, high + 1):
        if i >= one:  f[i] = (f[i] + f[i - one]) % MOD
        if i >= zero: f[i] = (f[i] + f[i - zero]) % MOD
    return sum(f[low:]) % MOD


相关文章
|
28天前
|
JavaScript
力扣3333.找到初始输入字符串Ⅱ
【10月更文挑战第9天】力扣3333.找到初始输入字符串Ⅱ
32 1
|
1月前
|
C++
Leetcode第43题(字符串相乘)
本篇介绍了一种用C++实现的字符串表示的非负整数相乘的方法,通过逆向编号字符串,将乘法运算转化为二维数组的累加过程,最后处理进位并转换为字符串结果,解决了两个大数相乘的问题。
24 9
|
1月前
【LeetCode 37】106.从中序与后序遍历构造二叉树
【LeetCode 37】106.从中序与后序遍历构造二叉树
17 0
|
1月前
|
算法 C++
Leetcode第八题(字符串转换整数(atoi))
这篇文章介绍了LeetCode上第8题“字符串转换整数(atoi)”的解题思路和C++的实现方法,包括处理前导空格、正负号、连续数字字符以及整数溢出的情况。
17 0
|
1月前
【LeetCode 22】459.重复的子字符串
【LeetCode 22】459.重复的子字符串
28 0
|
1月前
【LeetCode 20】151.反转字符串里的单词
【LeetCode 20】151.反转字符串里的单词
19 0
|
1月前
【LeetCode 19】541.反转字符串II
【LeetCode 19】541.反转字符串II
20 0
|
1月前
【LeetCode 18】6.2.反转字符串
【LeetCode 18】6.2.反转字符串
15 0
|
2月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
3月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
114 2