双指针6行代码,对于每一个数求1的个数,然后加起来。对于每一个数来说求个位只需要mod10就好,然后将原数/10 替换 原数,再mod10求得十位,以此类推,可得各十百千。。。位。 然后循环--即可

public int NumberOf1Between1AndN_Solution(int n) {
    int count=0;
    for(int i=n;i>0;i--){
        for(int j=i;j>0;j/=10){
            if(j%10==1) count++;
        }
    }return count;