Number of Digit One

Given an integer n, count the total number of digit 1 appearing in all non-negative integers less than or equal to n.

For example: Given n = 13, Return 6, because digit 1 occurred in the following numbers: 1, 10, 11, 12, 13.

Hint:

Beware of overflow.

Solution

public class Solution {
    public int countDigitOne(int n) {
        int ans = 0;
        for(long m=1; m<=n; m*=10){
            int a = (int)(n / m);
            int b = (int)(n % m);
            if(a%10==0) ans += a/10*m;
            else if(a%10==1) ans += a/10*m + (b+1);
            else ans += (a/10+1)*m;
        }
        return ans;
    }
}
comments powered by Disqus