给定数字N,找到最小的偶数E,使得E> N

chi*_*iru 5 java algorithm

给定数字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”的情况:

  1. 从给定数字中找出最小偶数位 (0, 2, 4, 6, 8)。设数字为x。
  2. 取其他数字,按降序排列。我们假设这个子串是S。

E = S + x(这里+表示串联)

  1. 如果在步骤1中没有找到偶数位,则没有这个数字。
  2. 如果第 2 步之后的 E <= N,则不存在这样的数字。

由于只有 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 的值)和最小值。

您可以从这里获取它并解决这个问题,因为它只需要从这里进行一些仔细的编码即可解决问题的下一部分。

  • -1:这是错误的。如果将最小的数字放在最后,则较大的数字会出现在较高的位置,从而导致数字更大。即使在第二个例子中,这显然也是错误的。 (2认同)