目录
•写在前面
最大数问题,不是选中最大的那个数,而是组合成最大的那个数,不是说这个问题有多难,而是说提供了一种很棒的思路,就是自定义排序,我觉得很值得收录,因为使用这种思路可以解决很多问题。话不多说,直接上题。
•题目
给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。
示例 1:
输入: [10,2]
输出: 210
示例 2:
输入: [3,30,34,5,9]
输出: 9534330
说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。
•解法
自定义排序规则,其实思路也没什么好讲的,直接看代码吧!思路很经典。
public static String largestNumberS1(int[] nums) {
int length = nums.length;
Integer[] numVote = new Integer[length];
for (int i = 0; i < length; i++) {
numVote[i] = nums[i];
}
Arrays.sort(numVote, new Comparator<Integer>() {
@Override
public int compare(Integer n1, Integer n2) {
String temp1 = n1 + "" + n2;
String temp2 = n2 + "" + n1;
//如果参数是一个按字典顺序排列等于该字符串的字符串,则返回值为0;
//如果参数是按字典顺序大于此字符串的字符串,则返回值小于0;
//如果参数是按字典顺序小于此字符串的字符串,则返回值大于0。
return temp2.compareTo(temp1);
}
});
String result = "";
for (int i = 0; i < length; i++) {
result = result +numVote[i];
}
if(result.charAt(0) == '0') return "0";
else return result;
}