233 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.

Solution

class Solution {
public:
    int countDigitOne(int n) {
        if ( n <= 0 ) return 0;
        long res = 0, i = 0, d = 1;
        while ( (n/d) != 0 ) {
            long x1 = 2*d- 1, x2 = d - 1;
            res += d*(n/(d*10)) + max(min(n%(d*10), x1) - x2, long(0));
            d *= 10;
        }
        return res;
    }
};

Notes
Count the appearance of 1 in last digit, last but second digit,..., and so on.

results matching ""

    No results matching ""