编写一个方法,计算从 0 到 n (含 n) 中数字 2 出现的次数。
示例:
输入: 25
输出: 9
解释: (2, 12, 20, 21, 22, 23, 24, 25)(注意 22 应该算作两次)
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-2s-in-range-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
import java.util.Scanner;
class Solution {
public int numberOf2sInRange(int n) {
return solve(n, 2);
}
private int solve(int n, int t) {
long base = 1;
int ans = 0;
while (n >= base) {
ans += n / (base * 10) * base + Math.min(base, Math.max(0, n % (base * 10) - t * base + 1));
base *= 10;
}
return ans;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
System.out.println(new Solution().numberOf2sInRange(in.nextInt()));
}
}
}