java算法----求从1到N中,4出现的个数
时间: 2023-10-06 16:05:17 浏览: 93
算法面试题大全.doc
可以使用上述数学方法和计算方法来求解这个问题。以数学方法为例:
假设要求 1 到 N 中数字 4 出现的次数,可以将 N 分解为两部分,分别是 4 的最高位(高位)和除去最高位后的低位部分。设 N 的最高位为 h,设除去最高位后的低位部分为 l,则有以下三种情况:
1)h < 4,此时 4 在 N 的最高位出现的次数为 l * 10^(n-1),其中 n 是 N 的位数;
2)h = 4,此时 4 在 N 的最高位出现的次数为 l * 10^(n-1) + (N mod 10^(n-1)) + 1;
3)h > 4,此时 4 在 N 的最高位出现的次数为 (l + 1) * 10^(n-1)。
参照以上三种情况,可以递归地求解出 1 到 N 中数字 4 出现的次数。具体实现可以参考下面的 Java 代码:
```
public static int countDigitFour(int n) {
if (n <= 0) {
return 0;
}
int res = 0;
int digit = 1;
int high = n / 10;
int cur = n % 10;
int low = 0;
while (high != 0 || cur != 0) {
if (cur < 4) {
res += high * digit;
} else if (cur == 4) {
res += high * digit + low + 1;
} else {
res += (high + 1) * digit;
}
low += cur * digit;
cur = high % 10;
high /= 10;
digit *= 10;
}
return res;
}
```
以上代码可以求解从 1 到 N 中数字 4 出现的次数。如果要求其它数字出现的次数,可以将代码中的 4 替换为其它数字即可。
阅读全文