1、题目描述
给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。
示例:
输入: 13
输出: 6
解释: 数字 1 出现在以下数字中: 1, 10, 11, 12, 13 。
2、题解
2.1、解法一
class Solution(object):
def count_one(self,end):
l = [str(i) for i in range(end)]
s = "".join(l)
return s.count("1")
def countDigitOne(self, n):
"""
:type n: int
:rtype: bool
"""
if n == 0:
return 0
elif n <10:
return self.count_one(n+1)
m = 0
tmp = n
print("n:",n)
while tmp//10:
if tmp < 10:
break
m += 1
tmp = tmp//10
n = n - tmp * 10 ** m
count = 0
if tmp ==1:
count += m*10**(m-1) +1 + n
else:
count = tmp*m*10**(m-1) + 10**m
ret = self.countDigitOne(n)
return ret+count