从1到n整数中1出现

最小的K个数

http://www.nowcoder.com/questionTerminal/bd7f978302044eee894445e244c7eee6

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

解题思路:这道题如果是把从1到n所有的数字按取余数的方法去计算1的个数,那么时间复杂度太过于庞大,因为我们不知道输入的数字有多大,就得去寻找数字的规律!

    int NumberOf1Between1AndN_Solution(int n){
        int count = 0;
        long long pos = 1;
        for(;pos <= n;pos*=10){
            // 将 n 分为两部分,big为大部分,small 小的部分
            int big = n / pos;
            int small = n % pos;
            //当前位置为1的时候
            if(big % 10 == 1){
                count += small + 1;
            }
            count +=(big+8)/10*pos;
        }
        return count;
    }
全部评论

相关推荐

不愿透露姓名的神秘牛友
11-20 19:57
已编辑
某大厂 golang工程师 23.0k*16.0, 2k房补,年终大概率能拿到
点赞 评论 收藏
分享
猪扒已出闸:方向不够聚焦,看不出来是想找什么方向的工作
点赞 评论 收藏
分享
球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务