数位DP-2出现的次数
问题描述
编写一个方法,计算从 0 到 n (含 n) 中数字 2 出现的次数。
示例:
输入: 25
输出: 9
解释: (2, 12, 20, 21, 22, 23, 24, 25)(注意 22 应该算作两次)
提示:
n <= 10^9
问题求解
class Solution:
def numberOf2sInRange(self, n: int) -> int:
s = str(n)
@cache
def f(i, is_limit, cnt):
if i == len(s):
return cnt
res = 0
up = int(s[i]) if is_limit else 9
for d in range(0, up + 1):
res += f(i + 1, is_limit and d == up, cnt + int(d == 2))
return res
return f(0, True, 0)