例如 8, 99, 10, 3200 ,拼接出的最大数是998320010。
思路:
贪心。
考虑拼接出的数,显然如果一个数第一位是9 那么应该放在最左边。
剩下的数,同样的道理,选出第一位最大的那个值,往后拼接。如果他们的第一位相等,则比较第二位,若还是相等,再比较下一位,还是取大的数拼接到后面。
如果两个数,位数不同,且短的和长的前几位完全相同,例如9911和,99, 头两位都相等,那么我们选择短的那个,因为991199和999911相比,还是后者要更大。
根据这个原则,我们可以对输入数组进行“排序”,其排序方法就是按照上述原则。
最后把排序后的数组依次输出即可。
实现代码如下:
思路:
贪心。
考虑拼接出的数,显然如果一个数第一位是9 那么应该放在最左边。
剩下的数,同样的道理,选出第一位最大的那个值,往后拼接。如果他们的第一位相等,则比较第二位,若还是相等,再比较下一位,还是取大的数拼接到后面。
如果两个数,位数不同,且短的和长的前几位完全相同,例如9911和,99, 头两位都相等,那么我们选择短的那个,因为991199和999911相比,还是后者要更大。
根据这个原则,我们可以对输入数组进行“排序”,其排序方法就是按照上述原则。
最后把排序后的数组依次输出即可。
实现代码如下:
-
import java.io.IOException;
-
-
public class main {
-
-
// if a>b return 1
-
// if a==b return 0;
-
// if a
-
public static int comparestrvalue(String a, String b) {
-
int ia =0;
-
int ib =0;
-
while(ia<a.length() && ib<b.length()){
-
if(a.toCharArray()[ia]>b.toCharArray()[ib]){
-
return 1;
-
}
-
if(a.toCharArray()[ia]<b.toCharArray()[ib]){
-
return -1;
-
}
-
ia++;
-
ib++;
-
}
-
if( a.length()<b.length()){
-
return 1;
-
}
-
if( a.length()>b.length()){
-
return -1;
-
}
-
return 0;
-
}
-
-
public static void sortinput(String[] input) {
-
for (int i = 0; i < input.length - 1; i++) {
-
for (int j = 0; j < input.length - i - 1; j++) {
-
if (comparestrvalue(input[j], input[j + 1]) < 0) {
-
String temp = input[j];
-
input[j] = input[j + 1];
-
input[j + 1] = temp;
-
}
-
}
-
}
-
}
-
/**
-
* @param args
-
* @throws Exception
-
* @throws IOException
-
*/
-
public static void main(String[] args){
-
// TODO Auto-generated method stub
-
String[] input = {"8", "99", "10", "3200"};
-
sortinput(input);
-
for(int i = 0; i<input.length;i++){
-
System.out.print(input[i]);
-
}
-
-
}
-
- }