Leetcode 2024-12-21 题目分享
2719. 统计整数数目 [Hard] 题解
经典数位DP题目+剪枝操作。
2719. 统计整数数目
给你两个数字字符串 num1
和 num2
,以及两个整数 max_sum
和 min_sum
。如果一个整数 x
满足以下条件,我们称它是一个好整数:
num1 <= x <= num2
min_sum <= digit_sum(x) <= max_sum
.
请你返回好整数的数目。答案可能很大,请返回答案对
10^9 + 7
取余后的结果。
注意,digit_sum(x)
表示 x
各位数字之和。
示例 1:
1 | 输入:num1 = "1", num2 = "12", min_num = 1, max_num = 8 |
示例 2:
1 | 输入:num1 = "1", num2 = "5", min_num = 1, max_num = 5 |
提示:
1 <= num1 <= num2 <= 10^22
1 <= min_sum <= max_sum <= 400
思路
- 针对数位问题,并且给了上界和下界;数据量超大 => 数位DP。
- 详细解释在代码里。
代码
1 | function count(num1: string, num2: string, min_sum: number, max_sum: number): number { |
复杂度分析
时间:O(10 * log num2 * max_sum)。DP数组一共有log num2 * max_sum个状态(数字的位数*各个数位和),而每一个状态需要10次遍历求解(枚举当前数位从0一直到9)。
空间:O(log num2 * max_sum)。
Comments
Comment plugin failed to load
Loading comment plugin