1~n中1出现的次数
输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。
例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。
示例 1:
输入:n = 12
输出:5
示例 2:
输入:n = 13
输出:6
思路
首先,输入一个正整数n,需要我们输出1~n中1有多少个。我们很容易想到从1开始循环累加到n,利用n对10求余数判断是否出现了1,如果整数大于10,就让整数除以10再判断是否为1.然而这个题目可以通过找规律的技巧找到解题的新的思路。
1、0-9中1的个数是1;
2、0-99中1的个数是91+10+1 = 20
对于0-99来说,我们可以将其拆0-89和90-99,对于0-89,可分开求十位上的1和和非十位上的1 的情况,非十位上的1(1,11,21,…,81)的情况91种,十位上的1(10,11,…,19)情况有10种;对于90-99(其实就是我们求得0-9的情况)只有1种,故加起来就是91+10+1。
3、0-999中1的个数是920+100+20 = 300
所以得出
F(1)=1;F(2)=20;F(3)=300;F(4)=4000;F(5)=50000;…可以往下递推。