【LeetCode】233. Number of Digit One
来源:互联网 发布:java nio网络编程 编辑:程序博客网 时间:2024/04/30 19:58
【LeetCode】233. Number of Digit One
【题目描述】
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.
【输入输出】
13 -> 6
【解题思路】
1. 观察可知,f(9)=1, f(99)=20, f(999)=300, ...2. 对于n上的任意位m,k表示其位数,1表示个位,10表示十位,以此类推3. m <= 1, ans = m * f(k - 1) + f(m % k) + m % k + 14. m > 2, ans = m * f(k - 1) + f(m % k) + k5. 例如求f(514)=5*f(99)+100+f(14)=200+f(14)=200+1*f(9)+4+1+f(4)=206+f(4)=207
【代码】
class Solution {public:int countDigitOne(int n) {double kk = 1, ans = 0;int k = 1, inter, c = 0;while (n / (int)kk != 0) { kk *= 10; c++; }k = (int)(kk / 10);inter = (int)((c * kk / 10 - k) / 10);while (n >= 10) {if (n / k == 1) ans += (inter + n % k + 1);else ans += (inter * (n / k) + k);n %= k;while (k != 0 && n / k == 0) {k /= 10;inter = (inter - k) / 10;}}ans += ((n <= 0) ? 0 : 1);return ans;}};
0 0
- [leetcode] 233.Number of Digit One
- [LeetCode]233.Number of Digit One
- [leetcode] 233. Number of Digit One
- leetcode 233. Number of Digit One
- [LeetCode]233. Number of Digit One
- LeetCode 233. Number of Digit One
- leetcode.233. Number of Digit One
- LeetCode-233.Number of Digit One
- 233. Number of Digit One leetcode
- [LeetCode]233. Number of Digit One
- 【LeetCode】233. Number of Digit One
- Leetcode 233. Number of Digit One
- leetcode 233. Number of Digit One
- [leetcode]233. Number of Digit One
- leetcode 233. Number of Digit One
- leetcode 233. Number of Digit One
- Number of Digit One 【leetcode】
- [leetcode] Number of Digit One
- C语言编程100例:2
- BestCoder Round #93 MG loves gold hdu 6019
- BestCoder Round #93
- RabbitMQ
- 【内核驱动】 在内核源码中添加第一个驱动程序
- 【LeetCode】233. Number of Digit One
- 异常检测RX算法
- Autolayout
- 用nfs挂载内核时出错 ERROR: Cannot umount的解决办法
- VMware的三种工作模式
- tensorflow cross_entropy 四种交叉熵计算函数
- LeetCode 遍历技巧 | 18. 4Sum
- 死磕 Java 并发 : 深入分析 volatile 的实现原理
- 计算机专外Week2-Exercises