参考链接:https://discuss.leetcode.com/topic/18054/4-lines-o-log-n-c-java-python

1到n的整数中,1出现的次数,如11中,1出现了两次,并不是求包含1的数的个数

找规律:

假设n为六位数 abcdef.

求个位(f所在位)为1的数的个数C1:

  将n分为两部分:

    P = n / 1 = abcdef

    Q = n % 1 = 0

    对P,如果f > 1,则f的前缀从0~abcde,共(abcde+1)个

           如果f == 1,则f的前缀从0~abcde-1, ,共(abcde)个

           当前缀为abcde时,f为1,即以abcde为前缀的数,对于前缀,abcde,对应的数为:abcdef,C1共(abcde * 1 ) + (Q+1) 个,共(abcde+1)个

           如果f == 0,则f的前缀从0~abcde-1,共(abcde)个

求十位(e所在位)为1的数的个数C10:

  将n分为两部分:

    P = n / 10 = abcde

    Q = n % 10 = f

    对P,如果e > 1,则e的前缀从0~abcd,对于每一个前缀,a'b'c'd',它对应着十个数:a'b'c'd'1f'(f'从0到9),C10共( abcd +1 ) * 10个

           如果e == 1,则e的前缀从0~abcd-1,对于每一个前缀,a'b'c'd',它对应着十个数:a'b'c'd'1f'(f'从0到9)

               当前缀为abcd时,e为1,即以abcde为前缀的数,对于前缀,abcde,对应的数为:abcdef'(f'从0到f),C10共(abcd  * 10 ) + (Q+1) 个

           如果e == 0,则e的前缀从0~abcd-1,对于每一个前缀,a'b'c'd',它对应着十个数:a'b'c'd'1f'(f'从0到9)

当前缀为abcd时,e为0,没有十位为1的数,C10共(abcd  * 10 )个

求百位(d所在位)为1的数的个数C100:

  将n分为两部分:

    P = n / 100 = abcd

    Q = n % 100 = ef

    对P,如果d > 1,则d的前缀从0~abc,对于每一个前缀,a'b'c',它对应着一百个数:a'b'c'1e'f'(e'f'从00到99),C100共(abc+1) * 100个

           如果d == 1,则d的前缀从0~abc-1,对于每一个前缀,a'b'c',它对应着一百个数:a'b'c'1e'f'(e'f'从00到99)

               当前缀为abc时,d为1,即以abcd为前缀的数,对于前缀,abcd,对应的数为:abcde'f'(e'f'从00到ef),C10共(abc * 100 ) + (Q+1) 个

           如果d == 0,则d的前缀从0~abc-1,对于每一个前缀,a'b'c',它对应着一百个数:a'b'c'1e'f'(e'f'从00到99)

当前缀为abc时,d为0,没有百位为1的数,C100共(abc * 100 )个

。。。。。。

设P = abcd

当d==0时,( P + 8 )/ 10 = abc

当d==1时,( P + 8 )/ 10 = abc

当d>1时,( P + 8 )/ 10 = abc+1

代码如下:

void countOne( int n )
{int cnt = 0;for( int m = 1; m <= n; m *= 10 ){int a = n / m;int b = n % m;cnt += ( ( a + 8 ) / 10 ) * m;if( a % 10 == 1 ){cnt += ( b+1 );}}return cnt;
}

3出现的次数也采用同样的办法:

int countT( int n )
{int cnt = 0;for( int m = 1; m <= n; m *= 10 ){int a = n / m;int b = n % m;cnt += ( ( a + 6 ) / 10 ) * m;if( a %10 == 3 ){cnt += ( b+1 );}}return cnt;
}

转载于:https://www.cnblogs.com/wangzhiyi/p/6862186.html

1到n的整数中,1出现的次数相关推荐

  1. shell最大出现和连续出现次数_从 1 到 n 整数中 1 出现的次数

    题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...

  2. 剑指offer:整数中1出现的次数(从1到n整数中1出现的次数)

    题目描述 求出1-13的整数中1出现的次数,并算出100-1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...

  3. 【刷算法】整数中1出现的次数(从1到n整数中1出现的次数)

    题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...

  4. 从1到n整数中1出现的次数

    从1到n整数中1出现的次数 题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次, ...

  5. 整数中1出现的次数(从1到n整数中1出现的次数)

    题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...

  6. 30 整数中1出现的次数(从1到n整数中1出现的次数)这题很难要多看*

    题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...

  7. 《剑指offer》-- 数组中的逆序对、最小的K个数、从1到n整数中1出现的次数、正则表达式匹配、数值的整数次方

    一.数组中的逆序对: 1.题目: 数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出 ...

  8. 《剑指offer》整数中1出现的次数(从1到n整数中1出现的次数)

    题目:求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了.AC ...

  9. 《剑指offer》第四十三题(从1到n整数中1出现的次数)

    // 面试题43:从1到n整数中1出现的次数 // 题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如 // 输入12,从1到12这些整数中包含1 的数字有1,10,11和12 ...

  10. 《剑指offer》-整数中1出现的次数

    题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...

最新文章

  1. 3dsMax插件V-Ray渲染与合成学习课程 3ds Max: Rendering for Compositing in V-Ray Next
  2. shader 2: vertex, fragment, surf的区别
  3. 四位共阳极数码管显示函数_Verilog笔记
  4. NOJ37 回文字符串---整理一下都是各种回文类型啊,
  5. 杭州「增长黑客」集结令!曲卉老师想约你来网易聊一聊
  6. [转]JQuery.Ajax之错误调试帮助信息
  7. 前端学习(1855)vue之电商管理系统电商系统之安装mysql出现VCRUNTIME140_1.dll
  8. python图纸教程_python入门教程 python入门神图一张
  9. imregionalmax imregionalmin imextendedmax imextendedmin imhmax imhmin 函数的详解 matlab中函数
  10. vim命令失效了怎么办
  11. [渝粤教育] 西南科技大学 成本会计 在线考试复习资料(1)
  12. MinGW安装及介绍
  13. Python Pymysql实现数据存储
  14. the sdk seems invalid pycharm
  15. 网页旅游景点页面建设
  16. 父进程退出后,子进程自动消亡
  17. 支持向量机1-线性可分支持向量机
  18. Facade模式新解
  19. Win10同时安装两个版本的JDK并随时切换,JDK8和JDK11手把手教学
  20. 如何在500个甚至上千微信群运营推广和赚钱?

热门文章

  1. javascript框架比较(二)
  2. Div+CSS布局入门教程(四) 页面顶部制作之二
  3. 深度学习《GAN模型学习》
  4. FCGF论文阅读笔记
  5. 知识图谱的概念、应用与构建
  6. 在hue中操作hive
  7. 网络爬虫中Jsoup请求url
  8. VC++开发演算稿式计算语言-可编程绘图的计算器
  9. 简单且有创意的python作品_适合练手的 14 个Python 小项目,趣味十足!
  10. java c 转换_Java怎么转换c语言?