3. 统计数字

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

样例 1:

输入:
k = 1, n = 1
输出:
1
解释:
在 [0, 1] 中,我们发现 1 出现了 1 次 (1)。

样例 2:

输入:
k = 1, n = 12
输出:
5
解释:
在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 中,我们发现 1 出现了 5 次 (1, 10, 11, 12)(注意11中有两个1)。

class Solution {
public:
    /**
     * @param k: An integer
     * @param n: An integer
     * @return: An integer denote the count of digit k in 1..n
     */
    int digitCounts(int k, int n) {
        // write your code here
        
        int count=0;
        int i=0;
        int value=-1;               //考虑0的情况
        int last_one=-1;            //考虑0的情况
        
        while(i<=n){
            
            if(value==-1){
                 value=i;
            }
               
            if(value!=0){               //考虑非0 的情况
                last_one=value%10;          //最后一位
                value=value/10;             //抛弃最低位
            }
            
            if(last_one==k){
                count++;
            }
            
            if(value==0){
                 if(k==i&&i==0)//处理特殊情况
                    count++;
                value=-1;           //重置value值
                i++;                //前进一步 
   
            }
            
           
        }
        
        return count;
        
    }
};

算法设计思想:

  • 不断的抛出最低的个位数且缩小当前数字的大小;
  • 直到当前数值缩小为0时,处理下个数值;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目: 计算数字k在0到n中的出现的次数,k可能是0~9的一个值 样例: 例如n=12,k=1,在 [0, 1, ...
    剑戈2阅读 4,276评论 1 0
  • 计算数字k在0到n中的出现的次数,k可能是0~9的一个值样例:例如n=12,k=1,在 [0, 1, 2, 3, ...
    和蔼的zhxing阅读 2,962评论 0 1
  • 题目链接:https://www.lintcode.com/problem/digit-counts/descri...
    Airycode阅读 708评论 0 0
  • 描述计算数字k在0到n中的出现的次数,k可能是0~9的一个值 样例例如n=12,k=1,在 [0, 1, 2, 3...
    AustinWeii阅读 1,072评论 0 0
  • 题目 描述 计算数字k在0到n中的出现的次数,k可能是0~9的一个值 样例 例如n=12,k=1,在 [0, 1,...
    悠扬前奏阅读 3,443评论 0 0