【剑指OFFER】 43. 1~n 整数中 1 出现的次数
发布日期:2021-06-29 19:46:46
浏览次数:2
分类:技术文章
本文共 1050 字,大约阅读时间需要 3 分钟。
题目:输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。
例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。
示例 1:
输入:n = 12 输出:5示例 2:
输入:n = 13 输出:6限制:
1 <= n < 2^31
答案:
// 本例中的是999中1的个数:300; 99的话就是20 ; 9的话就是1 ;9999就是4000class Solution { public int countDigitOne(int n) { return f(n); } public int f(int n){ //以1234为例子 if(n == 0) return 0; if(n < 10) return 1; String s = String.valueOf(n); int c = (int)(s.charAt(0) - '0'); int f1 = (s.length() - 1) * (int)Math.pow(10, s.length() - 2);//f1是999中1的个数:300; 99的话就是20 ; 9的话就是1;9999就是4000 int f2 = n - c * (int)Math.pow(10, s.length() - 1);//f2是去掉最高位的pow if(c == 1) return f1 + 1 + f2 + f(f2);// f1的300+1000的1个+1000-1234的234个+ f(234) else return f1 * c + (int)Math.pow(10, s.length() - 1) + f(f2); //f1的20个*234的首个数字2 + 100 + f(34) //0-99的20个+100-199的20个+100-199的100个+200-234的f(34)个 //f1的1 * 34的首数字3 + 10 + f(4) //0-9的1个+10-19的10个十位+10-19的1个个位+20-29的1个个位+30-34的f(4) }}
转载地址:https://darkness.blog.csdn.net/article/details/115242589 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月26日 05时38分24秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
WebApi返回json
2019-04-30
easyui带file上传控件表达提交
2019-04-30
首次听说Power-BI
2019-04-30
WebApi接口测试
2019-04-30
软件开发基本接口学习一
2019-04-30
在.net平台下创建接口服务
2019-04-30
RFC (一系列以编号排定的文件)
2019-04-30
IETF
2019-04-30
Auto2.0学习二--客户端的授权模式
2019-04-30
C#-TransactionScope
2019-04-30
OLTP/OLAP/HTAP学习一
2019-04-30
easyui.form
2019-04-30
酒店管理系统
2019-04-30
数据结构与算法学习一
2019-04-30
分布式学习一
2019-04-30
微服务学习十
2019-04-30
nginx负载均衡/反向代理学习一
2019-04-30
大数据学习一
2019-04-30
在线教育系统
2019-04-30