1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class Solution { public int countDigitOne(int n) { long _10k = 1; int count = 0;
while (_10k <= n) { long leftPart = n / (_10k * 10); count += (leftPart - 1 - 0 + 1) * _10k;
long rightPart = n % (_10k * 10); if (rightPart < _10k) { count += 0; } else if (rightPart < 2 * _10k) { count += rightPart - _10k + 1; } else { count += _10k; }
_10k *= 10; }
return count; } }
|
References
233. Number of Digit One
剑指 Offer 43. 1~n 整数中 1 出现的次数