43.1~n整数中1出现的次数

剑指 Offer 43. 1~n整数中1出现的次数

难度中等70

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

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

示例 1:

输入:n = 12
输出:5

示例 2:

输入:n = 13
输出:6
public int countDigitOne(int n) {
    int res = 0;
    for(long m = 1 ; m<=n ;m*=10){
        long a = n/m, b = n % m;
        res+=(a+8)/10*m+(a%10 == 1 ? b+1:0);
    }
    return res;
}