LeetCode 179. 【Java】179. Largest Number
原题链接
中等
作者:
tt2767
,
2020-03-01 23:02:50
,
所有人可见
,
阅读 708
/*
1. 排序方式自定义为: 数字b追加到数字a后面的值进行排序
2.1 最方便是转换为数组直接比较 a+b 和 b+a
2.2 使用数字比较时注意log10 测算长度要特判下0, pow是幂要+1
3. 需要去除前导零
*/
class Solution {
public String largestNumber(int[] nums) {
return withLong(nums);
// return withString(nums);
}
public String withLong(int[] nums){
String res = Arrays.stream(nums)
.boxed()
.sorted((b,a) -> calc(a,b).compareTo(calc(b,a)) )
.map(String::valueOf)
.collect(Collectors.joining(""));
int start = 0;
while (start < res.length() && res.charAt(start) == '0') start++;
return res.substring(Math.min(start, res.length()-1), res.length());
}
Long calc(int a, int b){return 1L * b + a*(int)Math.pow(10, (b == 0 ? 1 : 1 + (int)Math.log10(b)));}
public String withString(int[] nums){
String res = Arrays.stream(nums)
.mapToObj(Integer::toString)
.sorted((a,b)->(b+a).compareTo(a+b))
.collect(Collectors.joining(""));
int start = 0;
while (start < res.length() && res.charAt(start) == '0') start++;
return res.substring(Math.min(start, res.length()-1), res.length());
}
}