题目:求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。如1~13中含有1的个数为6个
思路:
1、按个、十、百、千…分别判断每一位中 1 的个数,然后相加。
2、对某一位含1个数的判断:
如对百位(i=100)包含1的个数:
a、当百位为0时,含1的个数为 更高位 的数字 *100,
1-13045,其中百位为1的数字个数为 13**100=1300个
b、当百位为1时,含1的个数,需要比a再增加个零头数:
1-13145,其中百位为1的数字个数为 13**100+(45+1)=1346个
c、当百位为2-9时,含1的个数,需要比a再增加整个数:
1-13245,其中百位为1的数字个数为 13**100+1*100 =1400个
class Solution:
def NumberOf1Between1AndN_Solution(self, n):
# write code here
#如何把每一位的数分开?/10
i=1
count=0
while i<=n:
a=n/i
b=n%i
count+=a/10*i #比第i位高的数,在第i位产生的1的个数
if a%10==1:
count+=b+1 #第i位为1,会增加零头数
elif a%10 >=2: #第i位大于1,会增加i个整数
count+=i
#count+=(a+8)/10*i+(a%10==1)*(b+1)
i*=10
return count