233. Number of Digit One(统计1出现的次数)

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)
原文地址:https://www.cnblogs.com/zle1992/p/8543817.html