【剑指OFFER】 43. 1~n 整数中 1 出现的次数
发布日期:2021-06-29 19:46:46
浏览次数:3
分类:技术文章
本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月09日 15时54分11秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
datalist控件的DataSourceID与DataSource属性
2019-04-30
GridView的DataSourceID vs. DataSource属性
2019-04-30
asp.net 2.0数据绑定详解
2019-04-30
DataList使用eval方法绑定图片
2019-04-30
Server.MapPath详解(转)
2019-04-30
FileUpload1文件上传
2019-04-30
GridView.DataKeyNames 属性
2019-04-30
Marquee实现文字走马灯滚动效果
2019-04-30
asp.net2.0数据访问工具--DataSource
2019-04-30
asp.net c# SqlDataSource 控件
2019-04-30
使用FileUpload上传文件并向数据库插入一条记录
2019-04-30
类 对象 实例 方法 继承 封装 多态
2019-04-30
类 对象 实例 继承 方法 封装 多态
2019-04-30
c#中类、对象、实例的区别
2019-04-30
什么是 C# 分部类(partia)
2019-04-30
在web.config中配置session的生命周期
2019-04-30
Oracle随机函数
2019-04-30
ASP.NET Application_Error错误日志写入
2019-04-30
asp.net错误日志写入
2019-04-30
C#如何使用转义字符来正确的表示双引号、单引号等字符串
2019-04-30