【剑指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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【剑指OFFER】44. 数字序列中某一位的数字
下一篇:【力扣】83. 删除排序链表中的重复元素

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月26日 05时38分24秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章