给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。
示例 1:
输入: [10,2]
输出: 210
示例 2:
输入: [3,30,34,5,9]
输出: 9534330
说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。
思路:
只需对原数组中的元素进行一次排序即可,排序规则是:
将原数组中的数均转换成字符串,如果s1 + s2大于s2 + s1(比较大小是用字符串的比较规则比较大小),则s1排在s2的前面(重写compare用于比较s1+s2与s2+s1);
如果只有0,直接返回0;
代码:
public class LargestNumber179 {
public String largestNumber(int[] nums) {
String[] strs = new String[nums.length];
for (int i = 0; i < nums.length; i++) {
strs[i] = String.valueOf(nums[i]);
}
Comparator<String> comp = new Comparator<String>() {
public int compare(String str1, String str2) {//重写compare方法
String s1 = str1 + str2;
String s2 = str2 + str1;
return s2.compareTo(s1);
}
};
Arrays.sort(strs, comp);//数组排序好使
if (strs[0].charAt(0) == '0') {
return "0";
}
StringBuffer sb = new StringBuffer();//字符串变量
for (String str : strs) {
sb.append(str);
}
return sb.toString();
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
int [] num = {3,30,34,5,9};
LargestNumber179 test = new LargestNumber179();
System.out.print(test.largestNumber(num));
}
}