lintcode3

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

计算数字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;
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容