对每一位分开考虑。例如对数abcdef的c位。当ab取0~ab-1时,c取1,def可以取0~999,所以此时的解有ab*10^3个;当ab取ab时,c的值可分为三种情况:
- c=0,此时c取不到1,结果为0
- c=1,此时c可以取到1,def可以取0~def,结果为def+1
- c>1,此时c可以取到1,def可以取0~999,结果为1000
import java.util.*;
public class Solution {
public int NumberOf1Between1AndN_Solution(int n) {
int res = 0;
List<Integer> list = new ArrayList<>();
while(n != 0) {
list.add(n % 10);
n /= 10;
}
for(int i = 0;i < list.size();i++) {
int left = 0, right = 0, t = 1;
for(int j = list.size() - 1;j > i;j--) {
left = left * 10 + list.get(j);
}
for(int j = i - 1;j >= 0;j--) {
right = right * 10 + list.get(j);
t *= 10;
}
res += left * t;
if(list.get(i) == 1) {
res += right + 1;
} else if(list.get(i) > 1) {
res += t;
}
}
return res;
}
}