44.从1到n整数中1出现的次数

输入一个整数 n,求从 1 到 n 这 n 个整数的十进制表示中 1 出现的次数。

例如输入 12,从 1 到 12 这些整数中包含 “1” 的数字有 1,10,11 和 12,其中 “1” 一共出现了 5 次。

数据范围:

1≤n≤109

样例:

输入: 12
输出: 5

代码:
详细题解地址:https://www.acwing.com/solution/content/124129/

class Solution {
    public int numberOf1Between1AndN_Solution(int n) {
        //若个位等于0,则1出现次数为a*1
        //若个位大于等于1,则1出现次数为a*1+1
        int res = n/10+(n%10>=1?1:0);
        for(int i = 10;i<=n;i*=10){
            int a = n/i/10,b = n%i;
            //若当前位为0,则1出现次数为a*i
            res += a*i;
            //若当前位大于1,则1出现次数为a*i+i
            if(n/i%10>1)res+=i;
            //若当前位等于1,则1出现次数为a*i+b+1
            else if(n/i%10==1)res+=b+1;
        }
        return res;
    }
}
posted @ 2025-05-28 11:00  回忆、少年  阅读(13)  评论(0)    收藏  举报