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.
-
Subscribe to see which companies asked this question
按位算,先算个位数的1 有多少个,再算十位数的,依次往上
写了好多遍啊。。。。
class Solution(object):
def countDigitOne(self, n):
if n < 1:
return 0
b = 0
t = 1
res = 0
while t <= n:
b = n / (t*10)
tres = b * t
temp = (n / t)%10
if temp == 10:
temp = 1
if temp == 1:
tres += n % t + 1
elif temp > 1:
tres += t
res += tres
#print t,b,tres
t *= 10
return int(res)