【LeetCode】233. Number of Digit One
2017-04-03 15:35
260 查看
【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 + 1 4. m > 2, ans = m * f(k - 1) + f(m % k) + k 5. 例如求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; } };
相关文章推荐
- LeetCode 233. Number of Digit One
- leetcode 233. Number of Digit One
- 【LeetCode】233. Number of Digit One
- 算法Week02.04 - LeetCode 233. Number of Digit One
- [LeetCode]233. Number of Digit One
- leetcode 233. Number of Digit One 从1到n的数组中出现数字1的数量 + 寻找规律,公式计算
- [Leetcode] 233. Number of Digit One 解题报告
- leetcode233. Number of Digit One
- Leetcode 233. Number of Digit One
- Leetcode 233. Number of Digit One (Medium) (cpp)
- leetcode 233. Number of Digit One
- Leetcode 233. Number of Digit One
- [leetcode]233. Number of Digit One
- leetcode hard模式专杀之233. Number of Digit One
- leetcode 233. Number of Digit One
- [leetcode] 233. Number of Digit One
- [leetcode] 233. Number of Digit One 解题报告
- leetcode No233. Number of Digit One
- leetcode 233. Number of Digit One
- [LeetCode]233. Number of Digit One