对每一位分开考虑。例如对数abcdef的c位。当ab取0~ab-1时,c取1,def可以取0~999,所以此时的解有ab*10^3个;当ab取ab时,c的值可分为三种情况:

  1. c=0,此时c取不到1,结果为0
  2. c=1,此时c可以取到1,def可以取0~def,结果为def+1
  3. 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;
    }
}