题目描述
求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。
思路:寻找规律可以发现,对于个位,数字1每隔10出现1次;对于十位,数字1每隔100出现1次;对于百位,数字1每隔1000出现100次;...对于不完整的部分,比如15,只需要对10取余加1即可。综上,变量有间隔次数和出现次数,同时要注意不完整部分,可以利用辗转相除的思想。
def NumberOf1Between1AndN_Solution(self, n): # write code here temp = n res = 0 base = 1#出现次数 while temp: p = temp % 10#不完整部分 temp = temp / 10 res += temp * base#乘出现次数 if p == 1: res += n % base+1 elif p > 1: res += base base*=10 return res