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) {
if(n < 0)
return 0;
long factor = 1;
int result = 0;
while(factor <= n){
int left = n / (int) factor;
int right = n % (int) factor;
int leftDigit = left % 10;
if(leftDigit >= 2){
result += (left / 10 + 1) * factor;
}
else if(leftDigit == 1){
result += right + 1 + (left / 10) * factor;
}
else{
result += left / 10 * factor;
}
factor *= 10;
}
return result;
}
}
思路详见:http://www.meetqun.com/thread-10288-1-1.html