Java 按整数对数字重新排序以获得最小值
如何对整数中的数字重新排序以获得最小值。 前任: 我输入一个数字:$71440,我希望我的输出是:$1447(这是重新排序后的最小值)。我想我会先把数字输入我的输入号码,然后我会重新排序。这是个好算法?是的,如果你Java 按整数对数字重新排序以获得最小值,java,algorithm,Java,Algorithm,如何对整数中的数字重新排序以获得最小值。 前任: 我输入一个数字:$71440,我希望我的输出是:$1447(这是重新排序后的最小值)。我想我会先把数字输入我的输入号码,然后我会重新排序。这是个好算法?是的,如果你 按数字分割 排序数字 用这些数字编一个数字 是的,如果你 按数字分割 排序数字 用这些数字编一个数字 您需要的基本上是对数字的数字进行排序。因此,是的,您提出的方法将起作用,而且似乎是一种合理的做法。您需要的基本上是对数字的数字进行排序。因此,是的,您提出的方法将起作用,而且似乎
- 按数字分割
- 排序数字
- 用这些数字编一个数字
- 按数字分割
- 排序数字
- 用这些数字编一个数字
- 是的,如果你
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);
}
基本思想是:
我想这大概就是你想要它做的。假设输入为正数,我相信如果需要,您可以找到如何修改它以处理负数
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);
}
基本思想是:
对于可读性,我认为Diasiares的答案更好。然而,另一种方法是这样的。它使用“类似合并排序”的算法对long进行排序。要了解它是如何工作的,请查看维基百科的
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;
}
公共静态长排序(long num){
长余弦;
如果(数值>9){
//将num分为两部分(n1、n2)
int numberOfDigits=(int)Math.log10(num)+1;
long n1=num/(long)数学功率(10,numberOfDigits/2);
长n2=数值%(长)数学功率(10,numberOfDigits/2);
//对每个部分进行排序
长s1=排序(n1);
长s2=排序(n2);
//把它们合并成一个数字
res=合并(s1,s2);
}否则{
res=num;
}
返回res;
}
/**
*将两个已排序的long合并为on long,例如149和345将得到134459
*/
公共静态长合并(长num1,长num2){
返回值(num1==0 | | num2==0)
?num1+num2
:num1%10
对于可读性,我认为Diasiares的答案更好。然而,另一种方法是这样的。它使用“类似合并排序”的算法对long进行排序。要了解它是如何工作的,请查看维基百科的
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;
}
公共静态长排序(long num){
长余弦;
如果(数值>9){
//将num分为两部分(n1、n2)
int numberOfDigits=(int)Math.log10(num)+1;
long n1=num/(long)数学功率(10,numberOfDigits/2);
长n2=数值%(长)数学功率(10,numberOfDigits/2);
//对每个部分进行排序
长s1=排序(n1);
长s2=排序(n2);
//把它们合并成一个数字
res=合并(s1,s2);
}否则{
res=num;
}
返回res;
}
/**
*将两个已排序的long合并为on long,例如149和345将得到134459
*/
公共静态长合并(长num1,长num2){
返回值(num1==0 | | num2==0)
?num1+num2
:num1%10
可能是重复的,因为你们认为这个问题是重复的,所以我得到了2张选票?你们可能得到了反对票,因为你们在提出问题之前没有表现出任何尝试。为了让它更好,你应该包括你为解决这个问题而写的任何代码。明白了,我错了。我只是觉得这几乎是算法问题,不需要显示我的代码。在下一个问题中,我不会这样做。谢谢你们解释可能重复的问题,我得到了2分,因为你们认为这个问题是重复的?你们可能得到了反对票,因为你们在提问之前没有表现出任何尝试。为了让它更好,你应该包括你为解决这个问题而写的任何代码。明白了,我错了。我只是觉得这几乎是算法问题,不需要显示我的代码。在下一个问题中,我不会这样做。感谢您的解释在每次拆分之后,我必须将其附加到int数组中,然后对数组进行排序吗?我可以在Java中这样做吗?@MinhThanh是的,你可以用数组对Java中的整数数组进行排序。sort()
@KyrSt Bucket sort对于大数来说要快得多。每次拆分后,我必须将其附加到整数数组中,然后再对数组进行排序吗?我可以在Java中这样做吗?@MinhThanh是的,您可以在Java中使用数组对整数数组进行排序。sort()
@KyrSt Bucket sort对于大数字来说速度更快。char
的排序顺序是这样的:零将以字符串形式结束在数字的开头。因此,对于“71440”
您将获得“01447”
Integer.parseInt
将跳过前导的零。char
的排序顺序是,零将以字符串形式结束在数字的开头。因此,对于“71440”
您将获得“01447”
Integer.parseInt
将跳过前导的零。感谢您的评论谢谢您的评论