题目描述
求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。
先来个暴力求解:
# -*- coding:utf-8 -*-
class Solution:
def NumberOf1Between1AndN_Solution(self, n):
# write code here
res = 0
for i in range(1, n+1):
res += str(i).count('1')
return res
这个是通过找规律来求,可以参考这里。
主要分三种情况:
1.当前位等于0,取之前结果即可;
2.当前位等于1,那么要加上之后余数+1个;
3.当前位大于1,那么要加上一个底数。
# -*- coding:utf-8 -*-
class Solution:
def NumberOf1Between1AndN_Solution(self, n):
# write code here
count, base, tmp = 0, 1, n
while tmp:
res, tmp = tmp % 10, tmp // 10 # 余数,整除结果
count += tmp*base
if res == 1:
count += n % base + 1 # 该位后面所有的数(0到n%base)
elif res > 1:
count += base # 相当于tmp+1
base *= 10
return count