面试题:1~n整数中1出现的次数
题目:
输入一个整数n,求1~n这n个整数的十进制表示中1出现的次数。
如输入12,1~12这些整数中包括1的数字有1、10、11和12,1一共出现了5次
【思路】
剑指offer上的解释有点看不懂囧,参考:https://www.cnblogs.com/wangkundentisy/p/8946858.html
对于一个形如xxxx的数,如要计算1出现在十位的数的个数,即xx1x的个数,分为三种情况
① xxab,a>1
a>1时,令a=1,则无论前面的两位xx取什么,都有相应的10个数可与之组合(如前面取23,后面可有10~19与其组合为2310~2319)
此时的数的取值为(xx+1)*10^(2-1) ——xx+1是因为,若xx为22,则可从0开始取值,一直到22,实际是23个取值;10^(2-1)是因为在十位上时,位置标志为2,然而与之相对应的只有10个数,需要2-1
② xxab,a=1
a=1时,a只有一种取值,即1,且受后面b的影响,与①的区别主要在于:当xx取到最高时(如2315时,23固定后,只能从10~15=6个数,而2325可从10~19=10个数),不再是10个