题目:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路:
可以知道,应该按照一定的顺序排列数组,而规则则是:s1+s2>s2+s1 对应 s1>s2,s2应该在前面
如上面的 3321和3213相比。利用重写compareTo函数进行排序。
代码:
import java.util.ArrayList;
import java.util.Arrays;
public class Solution {
public String PrintMinNumber(int [] numbers) {
if( numbers == null || numbers.length == 0 ) return "";
String[] arr = new String[numbers.length];
for(int i=0; i<numbers.length; i++){
arr[i] = numbers[i] + "";
}
Arrays.sort(arr, (s1, s2) -> ( s1 + s2 ).compareTo( s2 + s1));
String ret = "";
for( String temp:arr){
ret = ret + temp;
}
return ret;
}
}
网友评论