特别鸣谢:来自夸夸群的 醉笑陪公看落花@知乎,王不懂不懂@知乎,QFIUNE@csdn
感谢小伙伴们督促学习,一起进步
给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。
示例 1:
输入:n = 13
输出:6
示例 2:
输入:n = 0
输出:0
解题思路
以推算 4550 为案例,推算abcd数字的时候公式应该如何变动

- 找到 不同位数区间的规律,发现
0~m个9区间中,有m*(10^(m-1))个1 令f(m) = m*(10^(m-1)) - 如果m位a大于1,则带来
a*f(m)+10^m个1 - 如果m位a ==1,则带来 a*f(m) + bcd 个1
- 如果m位a ==0, 则不带来1
代码
class Solution:
def countDigitOne(self, n: int) -> int:
ab = n
m = -1
ans = 0
while(ab!=0):
b = ab%10
ab //=10
m+=1
if b > 1:
ans += 10 ** m
if m > 0:
ans += b * m * (10 ** (m - 1))
ab = n
while(ab!=0):
a = ab//(10**m)
if a==1:
ans += ab%(10**m)+1
ab %=(10**m)
m-=1
return ans


本文介绍了解决问题的解题思路,通过实例演示如何利用数学规律计算小于等于n的整数中1的个数,包括0位到多位数字的贡献。并提供了Python代码实现。
583

被折叠的 条评论
为什么被折叠?



