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.
public class Solution {
public int countDigitOne(int n) {
long res = 0;
int left = n;
int right = 0;
int base = 1;
while (left > 0) {
int cur = left % 10;
left = left / 10;
right = n % base;
if (cur == 1) {
res += left * base;
res += right + 1;
} else if (cur == 0) {
res += left * base;
} else {
res += (left+1) * base;
}
right = cur * base + right;
base = base * 10;
}
return (int) res;
}
}