重新排序int数字中的数字以获得最小值

时间:2018-04-05 13:55:29

标签: java algorithm

如何重新排序int数中的数字以获得最小值。 例如: 我输入一个数字:$ 71440,我希望我的输出是:$ 1447(这是重新排序后的最小值)。我想我会先输入我的输入数字like this中的数字,之后我会重新排序它们。那是好算法?

4 个答案:

答案 0 :(得分:2)

是的,如果你

是好的
  • 按数字分割
  • 排序数字
  • 从这些数字中取出数字

答案 1 :(得分:0)

您需要的是对数字的数字进行排序。所以,是的,您提出的方法将起作用,这似乎是一种合理的做法。

答案 2 :(得分:0)

我认为这大致完全符合您的要求。假设输入是正数,我确定如果需要,我可以弄清楚如何修改它以使用负数。

public static int leastValue(int input) {
    String s = Integer.toString(input);
    char[] c = s.toCharArray();
    Arrays.sort(c);
    s = new String(c);   
    return Integer.parseInt(s);
}

基本理念是:

  1. 将值转换为字符串
  2. 将每个字符放入数组
  3. 对字符数组进行排序,在大多数字符集中,这将对从最小到最大的数字进行排序。
  4. 再次将其变成一个字符串
  5. 将其解析为int

答案 3 :(得分:0)

为了便于阅读,我认为Diasiares的答案更好。然而,不同的方法将是这样的。它排序很长的"合并类似"算法。要了解其工作原理,请查看维基百科的gif file

public static long sort(long num) {
    long res;
    if (num > 9) {
        //split num into two parts(n1, n2)
        int numberOfDigits = (int) Math.log10(num) + 1;
        long n1 = num / (long) Math.pow(10, numberOfDigits / 2);
        long n2 = num % (long) Math.pow(10, numberOfDigits / 2);

        //sort each part
        long s1 = sort(n1);
        long s2 = sort(n2);

        //merge them into one number
        res = merge(s1, s2);
    } else {
        res = num;
    }
    return res;
}

/**
 * merges two sorted long into on long e.g 149 and 345 will give 134459
 */
public static long merge(long num1, long num2) {
    return (num1 == 0 || num2 == 0)
            ? num1 + num2
            : num1 % 10 < num2 % 10
                    ? num2 % 10 + merge(num1, num2 / 10) * 10
                    : num1 % 10 + merge(num1 / 10, num2) * 10;
}