整数中1出现的次数

来源:互联网 发布:淘宝到了1个钻 编辑:程序博客网 时间:2024/06/06 14:23

题目

求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。

思路及代码参考自链接

思路

观察 1~n 十进制数每一位1出现的次数

  • 每一位大于1
    543
    个位1:54*1+1 (00~53)
    十位1 : 5*10+10(0~4)
    百位1:0*100+100

  • 某些位等于1
    513
    个位1:51*1+1
    十位1 : 5*10+3+1
    百位1:0*100+100

  • 某些位等于0
    503
    个位1:51*1+1
    十位1 : 5*10(0~4)
    百位1:0*100+100

代码

public class Solution {    public int NumberOf1Between1AndN_Solution(int n) {        int count = 0;        int base = 1; //1,10,100        int round = n; //543,54,5,0        while(round>0){            int weight = round%10; //当前位大小            round = round/10;            count += round*base;            if(weight==1)                count += (n%base)+1;            else if(weight>1)                count += base;            base *= 10;        }        return count;    }}
原创粉丝点击