美文网首页
LintCode计算数字k在0到n中的出现的次数,k可能是0~9

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

作者: polelice | 来源:发表于2018-12-12 11:29 被阅读0次

参考了https://blog.csdn.net/z_opt/article/details/75570728 这篇文章,但是这篇文章对k=0时候的算法是错误的。
以下是当k==0,对十位进行分析:
例1:n=723,k=0 即(((n/10)%10)>k)
十位:十位出现0的情况为100~109 ......... 600~609 ,700~709
出现的个数为:70次 即(n/10/10)x10
例2:n=703,k=0 即(((n/10)%10)==k)
十位:十位出现0的情况为100~109 ......... 200~209 ,700~703
出现的次数是7 x10+4=74 即(n/10/10)x10+n%10+1

当k>0时候,对十位进行分析:
例1:n=723,k=1 即(((n/10)%10)>k)
十位:十位出现1的情况为010~019 ,110~019 .........610~619 ,710~719
出现的个数为:80次 即(n/10/10+1)x10
例2:n=723,k=2 即(((n/10)%10)==k)
十位:十位出现2的情况为020~029 ,120~129 .........620~629 ,720~723
出现的次数是7x10+4=74 即(n/10/10)x10+n%10+1
例3:n=723,k=3 即(((n/10)%10)<k)
十位:十位出现1的情况为030~039 ,130~139 ........630~639
出现的次数是7x10=70次 即(n/10/10)x10

以下为修正后的代码:

 */
    public int digitCounts(int k, int n) {
        // write your code here
     int count=0,singlecount=0;
        int p=n;
        int num=0;//表示处理数字的位数 num=0表示处理个位 1表示十位等
        if(n==0&&k==0) return 1;
        if(k>0){
        while(p!=0){
            if((p%10)>k) singlecount=(int) ((p/10+1)*(Math.pow(10, (double)num)));
            if((p%10)==k) singlecount=(int) ((p/10)*(Math.pow(10, (double)num))+(n%((Math.pow(10, (double)num))))+1);
            if((p%10)<k)  singlecount=(int) ((p/10)*(Math.pow(10, (double)num)));
            count+=singlecount;
            p=p/10;
            num++;
        }
        }else{
                while(p!=0){
            if(p==n){//k=0时候个位要特殊计算
                if(p%10>k)
            singlecount=(int) ((p/10+1)*(Math.pow(10, (double)num)));
            if(p%10==k)
            singlecount=(int) ((p/10)*(Math.pow(10, (double)num))+(n%((Math.pow(10, (double)num))))+1);
            }else{
                    if(p%10>k)
            singlecount=(int) ((p/10)*(Math.pow(10, (double)num)));
            if(p%10==k)
            singlecount=(int) ((p/10-1)*(Math.pow(10, (double)num))+(n%((Math.pow(10, (double)num))))+1);
            }
                count+=singlecount;
            p=p/10;
            num++;
                }
        }
        return count;
    }

相关文章

  • lintCode题解(3)

    标签(空格分隔): lintCode 题目: 统计数字 描述: 计算数字k在0到n中的出现的次数,k可能是0~9的...

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

    一道算法题,计算数字k在0到n中的出现的次数,k可能是0~9的一个值 要求:计算数字k在0到n中的出现的次数,k可...

  • 统计数字

    题目 计算数字k在0到n中的出现的次数,k可能是0~9的一个值 例如n=12,k=1,在 [0, 1, 2, 3,...

  • 3. 统计数字(lintcode)

    题目: 计算数字k在0到n中的出现的次数,k可能是0~9的一个值 样例: 例如n=12,k=1,在 [0, 1, ...

  • 3. 统计数字

    计算数字k在0到n中的出现的次数,k可能是0~9的一个值样例:例如n=12,k=1,在 [0, 1, 2, 3, ...

  • 统计数字

    统计数字 计算数字k在0到n中的出现的次数,k可能是0~9的一个值 样例 例如n=12,k=1,在[0, 1, 2...

  • 统计数字

    描述计算数字k在0到n中的出现的次数,k可能是0~9的一个值 样例例如n=12,k=1,在 [0, 1, 2, 3...

  • 3. 统计数字

    计算数字 k 在 0 到 n 中的出现的次数,k 可能是 0~9 的一个值。样例 样例 1: 输入:k = 1, ...

  • 3、统计数字

    题目描述 计算数字k在0到n中的出现的次数,k可能是0~9的一个值 思路 对每一个0到n的数字i,将i转化为Str...

  • lintcode3

    以下是我看了他人的解答:描述 计算数字k在0到n中的出现的次数,k可能是0~9的一个值 样例 例如n=12,k=1...

网友评论

      本文标题:LintCode计算数字k在0到n中的出现的次数,k可能是0~9

      本文链接:https://www.haomeiwen.com/subject/tuhuhqtx.html