68.把数组排成最小的数(数组、算法)。题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。
例如输入数组{32, 321},则输出这两个能排成的最小数字32132。
请给出解决问题的算法,并证明该算法。
分析:这是09年6月份百度的一道面试题,
从这道题我们可以看出百度对应聘者在算法方面有很高的要求。
package com.interview.algorithm;
import java.util.Arrays;
import java.util.Comparator;
public class MinCombinedNum68 {
public String MinNumFromArray(String[] arr){
StringBuilder sb = new StringBuilder();
Comparator<String> c = new Comparator<String>(){
@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
String first = o1+o2;
String second = o2+o1;
return first.compareTo(second);
}
};
Arrays.sort(arr, c);
for(int i = 0; i < arr.length; i++){
sb.append(arr[i]);
}
return sb.toString();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] arr = {"3","32","49","1","12","121"};
MinCombinedNum68 min = new MinCombinedNum68();
System.out.println(min.MinNumFromArray(arr));
}
}