Подсчитайте число 1-N 1 между

Расчетное количество целого числа от 1 до 13 1 возникает, и вычисляет количество раз целого число от 100 до 1300 в 1 происходит? С этой целью он прежде всего насчитал около 1 до 13 содержит цифры 1 имеют 1,10,11,12,13 поэтому появляется в общей сложности шесть раз, но проблемы позади него Meizhe. ACMer надеется , что вы поможете ему, и эта проблема является более обобщенной, число неотрицательного целого числа в диапазоне появляется 1 (число вхождений от 1 до п. 1) можно быстро найти.
Найти название закона,
число. 1, 0-9 POW (10,0) +10 0
Количество Pow (10,1) 0-99 + а. 1 (POW (10,0) +10
0) 10
0-999 количество ПР 1 (10,2) + (ПР (10,1) + (ПР (10,0) + 10
0) 10) 10 ,
а затем справа налево последние вычисленных появляется номер 1, например , 21345,
5 : 1;
4:10 + 4 1;
3: 100 + 3
20;
1: 1 345 + 100 + (20 10);
2: 2 10 000 + ((20 10 + 100) * 10 + 1000));
1 особые обстоятельства, если 21345, независимо от десяти тысяч, то один тысяч до 1, только 345, то число 0-999 до 1 вычислений.

public class Solution {
    public int NumberOf1Between1AndN_Solution(int n) {
        int level = 1,count = 0;
        int num = n;
        while(n>0){
            int p = n%10;
            if(p > 1){
               count += chen(level-1) * p + (int)Math.pow(10,level-1);
            }else if(p==1){
                count += chen(level-1)+(level == 1?1:1+num%((int)Math.pow(10,level-1)));
            }
            level++;
            n = n / 10;
        }
        return count;
    }
    int chen(int level){
        if(level == 0)    return 0;
        return 10*chen(level-1)+(int)Math.pow(10,level-1);
    }
}

рекомендация

отwww.cnblogs.com/a1225234/p/11024634.html