public static int calK(int n, int k) {
if (k > n) {
return 0;
}
int target = 1;
for (int i = 2; i <= k; i++) {
target = next(target, n);
}
return target;
}
private static int next(int start, int n) {
if (start == n) {
return start / 10 + 1;
}
if (start > 10 && start % 10 == 9) {
return after9(start,n);
}
int tmp = start * 10;
if (tmp <= n) {
return tmp;
}
return start + 1;
}
private static int after9(int m, int n) {
int tmp = m * 10;
if (tmp <= n) {
return tmp;
}
tmp = m + 1;
tmp /= 10;
while (tmp % 10 == 0) {
tmp /= 10;
}
if (tmp < 10) {
return tmp;
}
return (m + 1) / 10;
}
计算1-N中第K小的数字(按字典序排序)
最新推荐文章于 2024-07-19 01:08:27 发布