LeetCode OJ 之 Number of Digit One (数字1的个数)
来源:互联网 发布:网络硬盘录像机 编辑:程序博客网 时间:2024/06/10 09:07
题目:
Given an integer n, count the total number of digit 1 appearing in all non-negative integers less than or equal to n.
For example:
Given n = 13,
Return 6, because digit 1 occurred in the following numbers: 1, 10, 11, 12, 13.
思路:
对这个数字的每一位求存在1的数字的个数。从个位开始到最高位。
举个例子54215,比如现在求百位上的1,54215的百位上是2。可以看到xx100到xx199的百位上都是1,这里xx从0到54,即100->199, 1100->1199...54100->54199, 这些数的百位都是1,因此百位上的1总数是55*100
如果n是54125,这时由于它的百位是1,先看xx100到xx199,其中xx是0到53,即54*100, 然后看54100到54125,这是26个。所以百位上的1的总数是54*100 + 26.
如果n是54025,那么只需要看xx100到xx199中百位上的1,这里xx从0到53,总数为54*100
求其他位的1的个数的方法是一样的。
代码:
class Solution {public: int countDigitOne(int n) { int res=0; long left, right, base=1; if (n <= 0) return 0; while (n >= base) { left = n / base; //left包含当前位 right = n % base; //right为当前位的右半边 if ((left % 10) > 1) res+= (left / 10 + 1) * base; else if ((left % 10) == 1) res+= (left / 10) * base+ (right + 1); else res+= (left / 10) * base; base *= 10; } return res;}};可以把上面三个条件合成一步,如下:
class Solution {public: int countDigitOne(int n) { int res=0; long left, right, base=1; if (n<=0) return 0; while (n>=base) { left = n / base; //left包含当前位 right = n % base; //right为当前位的右半边 res += ((left + 8) / 10 * base) + (left % 10 == 1) * (right + 1); base *= 10; } return res;}};
0 0
- LeetCode OJ 之 Number of Digit One (数字1的个数)
- Number of Digit One 数字1的个数
- LeetCode Number of Digit One(计算1的个数)
- Leetcode OJ | Number of Digit One
- leetcode 233. Number of Digit One 1个数量
- LeetCode-Number of Digit One(编程之美-1的数目)
- Number of Digit One 计算十进制1出现的个数
- LeetCode之Number of Digit One
- Number of Digit One 【leetcode】
- [leetcode] Number of Digit One
- [LeetCode] Number of Digit One
- LeetCode ||Number of Digit One
- Number of Digit One -- leetcode
- *LeetCode-Number of Digit One
- [LeetCode] Number of Digit One
- Leetcode Number of Digit One
- Leetcode: Number of Digit One
- Leetcode Number of Digit One
- vs2015 "行号显示"设置(vs简单使用)
- C++中指针使用小结
- 使用crontab命令定时执行脚本
- 软件公司主要防泄密点
- HDU 1115 Lifting the Stone(多边形重心)
- LeetCode OJ 之 Number of Digit One (数字1的个数)
- Java使用限流处理大量的并发请求
- java数据结构学习笔记(一)综述
- eclipse去除所有调试断点
- Java 如何对文件进行多个Object对象流的读写操作
- 黑马程序员-Java概述
- 【十四】继承与多态(上)
- 设计模式——单例Singleton
- POJ - 1050 To the Max