如何重新排序int数中的数字以获得最小值。 例如: 我输入一个数字:$ 71440,我希望我的输出是:$ 1447(这是重新排序后的最小值)。我想我会先输入我的输入数字like this中的数字,之后我会重新排序它们。那是好算法?
答案 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);
}
基本理念是:
答案 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;
}