Given an integer n, count the total number of digit 1 appearing in all non-negative integers less than or equal to n.
For example:
Given n = 13,
Return 6, because digit 1 occurred in the following numbers: 1, 10, 11, 12, 13.
按不同位置统计
31456 统计百位时:
(0-31) 1 (0-99) 32*100次
31156:
(0-30)1(0-99) + (31) 1 (0-56) 31*100+56+1次
31056:
(0-30)1 (0-99) _31*100 次
1 class Solution: 2 def countDigitOne(self, n): 3 ones, wei = 0, 1 4 while wei <= n: 5 m = int(n / wei) % 10 # 求某位数字 6 7 if m > 1: 8 ones += (int(n / wei / 10) + 1) * wei 9 elif m == 1: 10 ones += (int(n / wei / 10)) * wei + (n % wei) + 1 11 else: 12 ones += (int(n / wei / 10)) * wei 13 wei *= 10 14 return int(ones)