Java实现 LeetCode 233 数字 1 的个数

news/2024/11/23 10:10:45/

233. 数字 1 的个数

给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。

示例:

输入: 13
输出: 6
解释: 数字 1 出现在以下数字中: 1, 10, 11, 12, 13 。

《编程之美》上这样说:

设N = abcde ,其中abcde分别为十进制中各位上的数字。
如果要计算百位上1出现的次数,它要受到3方面的影响:百位上的数字,百位以下(低位)的数字,百位以上(高位)的数字。
如果百位上数字为0,百位上可能出现1的次数由更高位决定。比如:12013,则可以知道百位出现1的情况可能是:100199,11001199,21002199,,…,1110011199,一共1200个。可以看出是由更高位数字(12)决定,并且等于更高位数字(12)乘以 当前位数(100)。注意:高位数字不包括当前位
如果百位上数字为1,百位上可能出现1的次数不仅受更高位影响还受低位影响。比如:12113,则可以知道百位受高位影响出现的情况是:100199,11001199,21002199,,…,1110011199,一共1200个。和上面情况一样,并且等于更高位数字(12)乘以 当前位数(100)。但同时它还受低位影响,百位出现1的情况是:12100~12113,一共14个,等于低位数字(13)+1。 注意:低位数字不包括当前数字
如果百位上数字大于1(29),则百位上出现1的情况仅由更高位决定,比如12213,则百位出现1的情况是:100199,11001199,21002199,…,1110011199,1210012199,一共有1300个,并且等于更高位数字+1(12+1)乘以当前位数(100)

class Solution {public int countDigitOne(int n) {if (n < 1)return 0;int len = getLenOfNum(n);if (len == 1)return 1;int tmp = (int) Math.pow(10, len - 1);int first = n / tmp; // 获取n的最高位数字int firstOneNum = first == 1 ? n % tmp + 1 : tmp; // 获取n的最高位为1时有多少个数字int otherOneNUm = first * (len - 1) * (tmp / 10); // 在介于n % tmp到n之间的数字中,除了最高位为1,其余各个数字分别为1 的总数和return firstOneNum + otherOneNUm + countDigitOne(n % tmp);}private int getLenOfNum(int n) {int len = 0;while (n != 0) {len++;n /= 10;}return len;}
}

http://www.ppmy.cn/news/694618.html

相关文章

C1认证学习十四、十五(算法常识、HTML Head 头)

C1认证学习十四、十五&#xff08;算法常识、HTML Head 头&#xff09; 文章目录 C1认证学习十四、十五&#xff08;算法常识、HTML Head 头&#xff09;十四&#xff08;算法常识&#xff09;任务背景任务目标查找算法1、顺序查找2、二分查找3、树表查找4、哈希查找5、其他查找…

1一9数字行书写法_1一9数字行书写法

用行书写数字1到9一般按照这9个数字的大写形式进行书写&#xff0c;其中数字1-9分别对应的大写是&#xff1a;壹、贰、叁、肆、伍、陆、柒、捌、玖、拾。行书书写这十个字要注重字体结构协调、错落有致、上下贯穿。 行书是介于楷书和草书之间的字体&#xff0c;不像草书那么潦草…

C1认证学习二十六(基础选择器)

C1认证学习二十六&#xff08;基础选择器&#xff09; 任务背景 CSS选择器是CSS规则的一部分&#xff0c;用来指定需要设置的样式的HTML元素&#xff0c;通过选择器可以实现CSS对HTML元素一对一或者一对多或者多对一的控制了啦。 任务目标 掌握基础选择器的应用。 五种基础…

C1认证学习十(Ipv6)

C1认证学习十&#xff08;Ipv6&#xff09; 任务背景 IPv4 中的分类不太合理&#xff0c;可以使用的IP地址数量过少&#xff0c;因此IPv6出现了&#xff0c;它的英文是Internet Protocol Version 6&#xff08;互联网协议第六版&#xff09;&#xff0c;这是用于替代IPv4的下…

在微型计算机中1mb等于多少字节,1mb等于多少字节

1MB等于2^20字节。MB&#xff0c;全称“MByte”&#xff0c;计算机中的一种储存单位。字节是计算机信息技术用于计量存储容量的一种计量单位&#xff0c;作为一个单位来处理的一个二进制数字串&#xff0c;是构成信息的一个小单位。 本教程操作环境&#xff1a;windows7系统、D…

深入理解Python的`functools.lru_cache`装饰器

在 Python 中&#xff0c;有许多内置的装饰器可以用来增强函数或者类的功能。其中之一就是 functools.lru_cache 装饰器。这是一个非常有用的装饰器&#xff0c;它可以帮助我们优化递归函数&#xff0c;避免重复计算已经计算过的值。在这篇文章中&#xff0c;我们将探讨 functo…

分享一些关于 CSS Grid 基础入门知识

网格系统&#xff08;CSS Grid&#xff09;是CSS中最重要的特性之一。它能够以简单的方式将元素对齐到列和行中。CSS网格使得设计复杂且响应式的网页变得更加容易&#xff0c;无需使用浮动、表格或定位。它还具有许多更强大的功能&#xff0c;如果你多加练习&#xff0c;就能发…

FPGA时序约束系列文章汇总

时序约束在FPGA开发中起着非常关键的作用。 与时序约束相关的方面包括时钟分析、路径分析、布线和布局优化等。时序约束的正确性和准确性对于设计的成功是至关重要的&#xff0c;因为它们对电路的时序性能、功耗和资源利用率有着重要影响。 有效的时序约束可以帮助设计人员充…