给定数字N,找到最小的偶数E,使得E> N且N和E中的数字相同。
Print NONE otherwise.
Sample:
Case1
Input
N = 34722641
Output
E = 34724126
Case2
Input
N = 8234961
Output
E = 8236194 (instead of 8236149)
Run Code Online (Sandbox Code Playgroud)
我的第二种情况通过了第一种情况,我的输出错误
public static int nextDigit(int number) {
String num = String.valueOf(number);
int stop = 0;
char[] orig_chars = null;
char[] part1 = null;
char[] part2 = null;
orig_chars = num.toCharArray();
for (int i = orig_chars.length - 1; i > 0; i--) {
String previous = orig_chars[i - 1] + "";
String next = orig_chars[i] + "";
if (Integer.parseInt(previous) < Integer.parseInt(next))
{
if (Integer.parseInt(previous) % 2 == 0) {
String partString1 = "";
String partString2 = "";
for (int j = 0; j <= i - 1; j++) {
partString1 = partString1.concat(orig_chars[j] + "");
}
part1 = partString1.toCharArray();
for (int k = i; k < orig_chars.length; k++) {
partString2 = partString2.concat(orig_chars[k] + "");
}
part2 = partString2.toCharArray();
Arrays.sort(part2);
for (int l = 0; l < part2.length; l++) {
char temp = '0';
if (part2[l] > part1[i - 1]) {
temp = part1[i - 1];
part1[i - 1] = part2[l];
part2[l] = temp;
break;
}
}
for (int m = 0; m < part2.length; m++) {
char replace = '0';
if (part2[m] % 2 == 0) {
replace = part2[m];
for (int n = m; n < part2.length - 1; n++) {
part2[n] = part2[n + 1];
}
part2[part2.length - 1] = replace;
break;
}
}
System.out.print(part1);
System.out.println(part2);
System.exit(0);
}
}
}
System.out.println("NONE");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Fal*_*len -1
结果为“NONE”的情况:
E = S + x(这里+表示串联)
由于只有 5 个可能的数字可以作为 E 的最后一位数字,因此我们首先考虑它们中的每一个。设当前偶数为e。我们将扫描 N 以查找 e 是否出现在 N 中。如果 e 没有出现在 N 中,则跳过。否则,我们从 N 中删除 1 次出现的 e,并将其添加到 E 的末尾。假设其余数字连接到 E1。
如果 e > N % 10,那么我们需要找到 E1 的排列,使得 E1 >= N/10 并且 E1 最小。如果 e <= N %10 那么我们需要 E1 的排列,使得 E1 > N/10 并且 E1 是每个此类排列的最小值。因此,问题简化为找到数字 E1 的排列,即大于或等于 E1(基于 e 的值)和最小值。
您可以从这里获取它并解决这个问题,因为它只需要从这里进行一些仔细的编码即可解决问题的下一部分。