Description
给定两个正整数 $l,r\ (1 \leq l \leq r \leq 10^{12})$,求区间 $[l,r]$ 里的所有整数中,每个数码 $0 \sim 9$ 各出现了几次。
Source
Solution
考虑 数位DP 。
用 $f_{pos,cnt}$ 表示当前到了第 $len - pos + 1$ 位,有 $cnt$ 个数码 $digit$ 的数中,共有多少个数码 $digit$ 。
分别计算 $0 \sim 9$ 每一个数码,注意判前导零(前导零不算数码 $0$),具体实现详见代码。时间复杂度为 $O(10\lg^2n)$ 。
Code
1 |
|