题目描述
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
示例:
输入:nums = [10,2]
输出:”210″
题目分析
贪心
对数字进行排序,o1o2 > o2o1 时,o1排在前面
Java
public String largestNumber(int[] nums) {
List<Integer> list = new ArrayList<>();
for (int n : nums) {
list.add(n);
}
list.sort((o1, o2) -> compare(o2, o1));
StringBuilder sb = new StringBuilder();
for (int n : list) {
sb.append(n);
}
if (sb.charAt(0) == '0') {
return "0";
}
return sb.toString();
}
private int compare(int o1, int o2) {
String s1 = Integer.toString(o1);
String s2 = Integer.toString(o2);
return (s1 + s2).compareTo(s2 + s1);
}
Kotlin
fun largestNumber(nums: IntArray): String {
val list = nums.sortedWith { o1, o2 -> ("o2" + "o1").compareTo("o1" + "o2") }
val ans = list.joinToString("")
if (ans[0] == '0') {
return "0"
}
return ans
}