思想:按位分析,从个位开始一位位分析,最后计算每个位中K出现次数的和
对个位进行分析:
例1:n=723, k=1 即((n%10)>k)
个位:个位出现1的情况为001,011,021…711,721
出现的个数为:73次 即n/10+1
例2: n=723,k=3 即((n%10)==k)
个位:个位出现3的情况为003,013,023…713,723
出现的个数为:73次 即n/10+1
例3:n=723,k=5 即((n%10)<k)
个位:个位出现5的情况为005,015,025…715
出现的个数为:72次 即n/10

对十位进行分析:
例1:n=723,k=1 即(((n/10)%10)>k)
十位:十位出现1的情况为010019,110029…610619,710719
出现的个数为:80次 即(n/10/10+1)10
例2:n=723,k=2 即(((n/10)%10)==k)
十位:十位出现2的情况为020029,020029…620629,720723
出现的次数是7
10+4=74 即(n/10/10)10+n%10+1
例3:n=723,k=3 即(((n/10)%10)<k)
十位:十位出现1的情况为030039,130139…630~639
出现的次数是7
10=70次 即(n/10/10)*10

百位和十位的分析方法一样,总之要得到哪个位上K出现的次数就要先得到该位上数的大小与k比较,公式如下:
int cur = (n/level) %10;//计算当前位
int bef = n/(10*level);//计算当前位高位
int aft = n - n/level *level;//计算当前位的低位

最后还有两种情况没考虑到第一种是K为0的情况,最高位上是不能出现0的,所以不能那么算,0是逢10便有,所以 count=n/10+1;
第二种是n=0 此时count=0

但是结果在k=0,n=100时结果出错,输出22,而不是正确的12,究其原因是最高位不能为零,所以多算了一个bef*level的数量,将这种情况单独列出减去即可

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 hereif (n<10 &&k==0) {return 1;}int sum =0;int level = 1;int a=10;while(n / level != 0){if (k == 0 && n / (level * 10) == 0) {// 最高位不能为0break;}int cur = (n/level) %10;//计算当前位int bef = n/(10*level);//计算当前位高位int aft = n - n/level *level;//计算当前位的低位if (cur >k) {sum += (bef+1)*level;}else if (cur <k) {sum += (bef)*level;}else{sum += (bef)*level +aft+1;}level*= 10;}if(k==0){//k=0,n=100时另外单独计算while(n>=100&&n/a>=10){sum=sum-a;a=a*10;}}return sum;}
};

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

  1. 算法—2,记一个自己的算法题 计算数字k在0到n中的出现的次数,k可能是0~9的一个值

    3 计算数字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 ...

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

    3. 统计数字 中文English 计算数字 k 在 0 到 n 中的出现的次数,k 可能是 0~9 的一个值. Example 样例 1: 输入: k = 1, n = 1 输出: 1 解释: 在 ...

  3. python中true代表0还是1_python 中的True和1及False和0是可以等价比较及是否是bool类型...

    python 中的True和1及False和0是可以等价比较及是否是bool类型 1.True和1及False和0是可以等价比较 [root@10.144.5.223 root]# cat test_ ...

  4. 计算1到N的十进制数中1的出现次数

    转自:http://hi.baidu.com/zhaoshengjin/blog/item/f1df6618cb1debbe4bedbc5d.html 问题描述:给定一个十进制正整数N,写下从1开始, ...

  5. kmeans中的k的含义_硬质合金中P、M、K、N、S、H六大字母含义详解

    数控技术在线 订单 | 技术 | 干货 | 社群 关注可加入机械行业群! 关注 P类: 硬质合金中,P类产品的切削范围是指碳钢,铸钢,包括0.25-0.25%C淬火和调质,易切钢包含退火与淬火调质,低 ...

  6. python json接口数据提取_返回数据中提取数据的方法(JSON数据取其中某一个值的方法)...

    返回数据中提取数据的方法 比如下面的案例是,取店铺名称 接口返回数据如下: {"Code":0,"Msg":"ok","Data& ...

  7. python获取json中的某个值_json文件返回数据中提取数据的方法(JSON数据取其中某一个值的方法)...

    比如下面的案例是,取店铺名称 接口返回数据如下:{"Code":0,"Msg":"ok","Data":{"S ...

  8. 2!=5 or 0在python中是否正确-不吹不擂,你想要的Python面试都在这里了【315+道题】...

    原标题:不吹不擂,你想要的Python面试都在这里了[315+道题] 有缘人如果看到这些题,不妨留言一下答案,来证明下你到底有多水,哈哈哈哈哈哈哈哈哈哈哈 第一部分 Python基础篇(80题) 1. ...

  9. 西门子博途安装服务器未响应,博途V13.0安装过程中出错

    悬赏: 1西币 | 解决时间:2016-05-21 19:31 博途V13.0安装过程中出错 BUNDLE: SIMATIC STEP 7 Professional V13.0 SEBU Versio ...

最新文章

  1. [笔记]Go语言在Linux环境下输出彩色字符
  2. Linux系统设置全局的默认网络代理
  3. h5 数字变化_前端/h5 D3.js实现根据数据动态更新图形/类似进度实时变化效果
  4. Matlab C混合编程
  5. ITK:过滤图像而没有复制其数据
  6. sql server高可用_SQL Server 2019常规可用性和安装概述
  7. 过年了,就别再背电脑回家。
  8. 蓝桥杯 ADV-179 算法提高 解二元一次方程组
  9. springboot2.x整合JavaMail以qq邮箱发送邮件
  10. MCS-51子程序库(二)
  11. python唯美壁纸_Python爬虫教程-爬取5K分辨率超清唯美壁纸源码
  12. python需要学什么-学习python需要什么基础吗?老男孩Python
  13. 可调稳压电源lm317实验报告_LM317可调稳压电源
  14. 外接显示器无信号的解决方案win10 笔记本
  15. UnityVR-初识Unity-实践-制作一个工程场景
  16. 计算机二级新年来临贺卡步骤,2021新年贺卡怎么做步骤图片
  17. wikioi 1219 骑士游历
  18. 简单电脑版微信双开方法多开bat分身代码教程
  19. 【MATLAB】理解采样频率和信号频率的关系
  20. c语言中a 的用法,C语言中#define的用法

热门文章

  1. 简单的toast提示,确认弹窗,显示图片预览插件
  2. 软骨鱼新增SSL证书销售功能,一键开通证书官网,自购省钱,外销赚钱
  3. 二进制数与十进制数相互转换的C代码(C语言/C程序)
  4. MDaemon架设邮件服务器案例
  5. SU插件情报局 | Connect 边线连接、SplitTools 分割面、Align 对齐三款工具详解(附插件获取)
  6. 从阿尔法本质和三种类型的阿尔法策略谈起
  7. 如何改变uniapp中checkbox样式
  8. Nutanix 组件要点摘录
  9. Oracle数据恢复专题
  10. 【百度云盘】为什么几G的文件一下子就上传上去了?