问题描述
编写一个方法,计算从 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)
标签:cnt,return,int,res,up,次数,limit,DP,数位
From: https://www.cnblogs.com/hyserendipity/p/16586274.html