计算数字 k 在 0 到 n 中的出现的次数,k 可能是 0~9 的一个值。
思想:按位分析,从个位开始一位位分析,最后计算每个位中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
出现的次数是710+4=74 即(n/10/10)10+n%10+1
例3:n=723,k=3 即(((n/10)%10)<k)
十位:十位出现1的情况为030039,130139…630~639
出现的次数是710=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 的一个值。相关推荐
- 算法—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 ...
- python 计算数字 k 在 0 到 n 中的出现的次数,k 可能是 0~9 的一个值
3. 统计数字 中文English 计算数字 k 在 0 到 n 中的出现的次数,k 可能是 0~9 的一个值. Example 样例 1: 输入: k = 1, n = 1 输出: 1 解释: 在 ...
- 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_ ...
- 计算1到N的十进制数中1的出现次数
转自:http://hi.baidu.com/zhaoshengjin/blog/item/f1df6618cb1debbe4bedbc5d.html 问题描述:给定一个十进制正整数N,写下从1开始, ...
- kmeans中的k的含义_硬质合金中P、M、K、N、S、H六大字母含义详解
数控技术在线 订单 | 技术 | 干货 | 社群 关注可加入机械行业群! 关注 P类: 硬质合金中,P类产品的切削范围是指碳钢,铸钢,包括0.25-0.25%C淬火和调质,易切钢包含退火与淬火调质,低 ...
- python json接口数据提取_返回数据中提取数据的方法(JSON数据取其中某一个值的方法)...
返回数据中提取数据的方法 比如下面的案例是,取店铺名称 接口返回数据如下: {"Code":0,"Msg":"ok","Data& ...
- python获取json中的某个值_json文件返回数据中提取数据的方法(JSON数据取其中某一个值的方法)...
比如下面的案例是,取店铺名称 接口返回数据如下:{"Code":0,"Msg":"ok","Data":{"S ...
- 2!=5 or 0在python中是否正确-不吹不擂,你想要的Python面试都在这里了【315+道题】...
原标题:不吹不擂,你想要的Python面试都在这里了[315+道题] 有缘人如果看到这些题,不妨留言一下答案,来证明下你到底有多水,哈哈哈哈哈哈哈哈哈哈哈 第一部分 Python基础篇(80题) 1. ...
- 西门子博途安装服务器未响应,博途V13.0安装过程中出错
悬赏: 1西币 | 解决时间:2016-05-21 19:31 博途V13.0安装过程中出错 BUNDLE: SIMATIC STEP 7 Professional V13.0 SEBU Versio ...
最新文章
- [笔记]Go语言在Linux环境下输出彩色字符
- Linux系统设置全局的默认网络代理
- h5 数字变化_前端/h5 D3.js实现根据数据动态更新图形/类似进度实时变化效果
- Matlab C混合编程
- ITK:过滤图像而没有复制其数据
- sql server高可用_SQL Server 2019常规可用性和安装概述
- 过年了,就别再背电脑回家。
- 蓝桥杯 ADV-179 算法提高 解二元一次方程组
- springboot2.x整合JavaMail以qq邮箱发送邮件
- MCS-51子程序库(二)
- python唯美壁纸_Python爬虫教程-爬取5K分辨率超清唯美壁纸源码
- python需要学什么-学习python需要什么基础吗?老男孩Python
- 可调稳压电源lm317实验报告_LM317可调稳压电源
- 外接显示器无信号的解决方案win10 笔记本
- UnityVR-初识Unity-实践-制作一个工程场景
- 计算机二级新年来临贺卡步骤,2021新年贺卡怎么做步骤图片
- wikioi 1219 骑士游历
- 简单电脑版微信双开方法多开bat分身代码教程
- 【MATLAB】理解采样频率和信号频率的关系
- c语言中a 的用法,C语言中#define的用法