面试题 17.06
Write a method to count the number of 2s that appear in all the numbers between 0 and n (inclusive).
Example:
Input: 25 Output: 9 Explanation: (2, 12, 20, 21, 22, 23, 24, 25)(Note that 22 counts for two 2s.) Note:
n <= 10^9
Solutions
The same as
problem 233, 1067math
class Solution {
public:
int numd(int n, int d) {
int res = 0;
for (long base = 10; base / 10 <= n; base *= 10) {
long cnt = base / 10;
res += (n / base) * cnt + min(max(n % base - d * cnt + 1, 0l), cnt);
if (d == 0)
res -= base;
}
return res;
}
int numberOf2sInRange(int n) {
return numd(n, 2);
}
};Last updated
Was this helpful?