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.
Difficulty: Hard
public class Solution {
public int countDigitOne(int n) {
if(n <= 0) return 0;
if(n <= 9) return 1;
String s = Integer.toString(n);
int ans = 0;
for(int i = s.length() - 1; i >= 0; i--){
if(i == s.length() - 1){
if(s.charAt(i) == '0'){
ans += Integer.valueOf(s.substring(0, i));
}
else{
ans += Integer.valueOf(s.substring(0, i));
ans++;
}
}
else if(i == 0){
if(s.charAt(i) == '1'){
ans += (Integer.valueOf(s.substring(i + 1)) + 1);
}
else{
ans += Math.pow(10, (double)(s.length() - 1 - i));
}
}
else{
if(s.charAt(i) == '1'){
ans += Integer.valueOf(s.substring(0, i)) * Math.pow(10, (double)(s.length() - 1 - i));
ans += (Integer.valueOf(s.substring(i + 1)) + 1);
}
else if(s.charAt(i) == '0'){
ans += Integer.valueOf(s.substring(0, i)) * Math.pow(10, (double)(s.length() - 1 - i));
}
else{
ans += Integer.valueOf(s.substring(0, i)) * Math.pow(10, (double)(s.length() - 1 - i));
ans += Math.pow(10, (double)(s.length() - 1 - i));
}
}
}
return ans;
}
}