lintcode3

2018-10-19  本文已影响0人  小时候浪死了

以下是我看了他人的解答:
描述

计算数字k在0到n中的出现的次数,k可能是0~9的一个值

样例

例如n=12,k=1,在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],我们发现1出现了5次 (1, 10, 11, 12)

解:
特别需要注意的是当k=0时的特殊情况,如果before==0&&k==0时,则出现次数为0,即不加任何数。
其他情况则看current的before和after的大小来计算。

    int digitCounts(int k, int n) {
        // write your code here
        int current,before,after;
        int i=1,n_count=0;
        while(n/i!=0)
        {
            current=(n/i)%10;
            before=n/(i*10);
            after=n-n/i*i;
            if(k==0&&current>k)
            {
                if(before!=0)
                n_count+=before+1;
               
            }
            else if(current>k)
                n_count+=(before+1)*i;
            else if(current<k)
                n_count+=before*i;
            else
                n_count+=before*i+after+1;
            i=i*10;
        }
        return n_count;
    }
上一篇下一篇

猜你喜欢

热点阅读