题目描述
方法:
把数分为high,cur,low,针对cur的取值计算cur位置是1时1的个数,更新high,cur,low
class Solution:
def countDigitOne(self, n: int) -> int:
# res = 0
# for num in range(1,n+1):
# res += str(num).count("1")
# return res
res = 0
digit = 1
high, cur, low = n // 10, n % 10, 0
while high != 0 or cur != 0:
if cur == 0:
res += high * digit
elif cur == 1:
res += high * digit + low + 1
else:
res += (high + 1) * digit
low = cur * digit + low
digit *= 10
cur = high % 10
high = high // 10
return res