题目标题

在从1到n的正数中1出现的次数——输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。
例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次

参考解析
  1. class Solution:
  2. def countDigitOne(self, n: int) -> int:
  3. digit, res = 1, 0
  4. high, cur, low = n // 10, n % 10, 0
  5. while high != 0 or cur != 0:
  6. if cur == 0: res += high * digit
  7. elif cur == 1: res += high * digit + low + 1
  8. else: res += (high + 1) * digit
  9. low += cur * digit
  10. cur = high % 10
  11. high //= 10
  12. digit *= 10
  13. return res