最大值

最大值

给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。

注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。

示例1:

输入:nums = [10,2]
输出:”210”

示例2:

输入:nums = [3,30,34,5,9]
输出:”9534330”

实现思路

使用排序方法进行比较时,比较两个字符串(设为A和B),以先后顺序拼接而成的两个字符串A+B和B+A,如果A+B更大,则A在前B在后,否则A在后B在前。由于int型数组没有自定义排序的功能,字符串有自定义的排序,那么我们首先将原数组转化为字符串数组。采用外部排序接口Comparator,对compare方法传入(a, b),返回(b+a).compareTo(a+b)。若b+a > a+b结果为1,并排序交换a和b的位置;若b+a < a+b则不交换。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public String largestNumber(int[] nums) {
String[] strArr = new String[nums.length];
//数字数组转为字符串数组
for (int i = 0; i < nums.length; i++) {
strArr[i] = String.valueOf(nums[i]);
}
//自定义两个相连的字符串排序
Arrays.sort(strArr, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return (o2 + o1).compareTo(o1 + o2);
}
});
StringBuilder sb = new StringBuilder();
//防止出现了[0,0]的情况,此时返回"0"
if (strArr[0].equals("0")) {
return "0";
}
//字符数组转为字符串
for (String temp : strArr) {
sb.append(temp);
}
return sb.toString();
}

注:

compare用来比较排序两个参数,如果比较结果为1进行交换,其他不进行交换。
当后一个对象比当前对象大(o2.compareTo(o1) >0),返回结果值为1时,前后交换,说明是降序排列。
当后一个对象比当前对象小(o1.compareTo(o2) > 0),返回结果值为1时,前后交换,说明是升序排列。

最大值

作者

lvjie

发布于

2021-09-24

许可协议


:D 一言句子获取中...