题目描述
题干:
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
示例1:
输入:nums = [10,2]
输出:"210"
示例2:
输入:nums = [10]
输出:"10"
题解思路
返回数组中数字组成的最大数,最大数的问题我们都遇到过,但是这次的亮点在于不是单位的数字组合了
如果{4,42}和{4,45}这两个数组完全就是两个不同的答案了,所以这里我们不能像以前那样简单的排序
我们需要自己定义一种新的比较规则,这里采用lambda表达式来表示新的交换规则,代码如下
正确代码
class Solution {
public String largestNumber(int[] nums) {
//转换成String使用compareTo方法
String[] strNum = new String[nums.length];
for (int i = 0; i < nums.length; i++) {
strNum[i] = String.valueOf(nums[i]);
}
//排序规则
Arrays.sort(strNum, (a, b) -> {
return (b + a).compareTo(a + b);
});
StringBuffer stringBuffer = new StringBuffer();
for (String s : strNum) {
stringBuffer.append(s);
}
//排除{0,0}的情况
return stringBuffer.charAt(0) == '0' ? "0" : stringBuffer.toString();
}
}
总结
思路是很好想到的,主要是实现新的数学比较难以实现,其实这里lambda表达式我不太清楚其含义
因为我学习到的lambda表达式时用来代替匿名内部类来定义新对象的,而这里并没有新的对象产生
如果文章存在问题或者有大牛可以帮我解惑,欢迎在评论区斧正和评论解释,各自努力,你我最高处见