给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
示例 1:
输入:nums = [10,2]
输出:“210”
示例 2:
输入:nums = [3,30,34,5,9]
输出:“9534330”
析:
1、将int[]转化成String[];
2、对String[]进行字典序逆序排序:
Arrays.sort(ss, (a, b) -> {String ab = a + b;String ba = b + a;return ba.compareTo(ab);
});
3、拼接String[]中的每个元素,去掉前导0;
解:
public class Test {public static void main(String[] args) {int[] nums = {0, 0};Test test = new Test();String res = test.largestNumber(nums);System.out.println(res);}public String largestNumber(int[] nums) {int length = nums.length;String[] ss = new String[length];for (int i = 0; i < length; i++) {ss[i] = "" + nums[i];}Arrays.sort(ss, (a, b) -> {String ab = a + b;String ba = b + a;return ba.compareTo(ab);// 根据结果从大到小排序});StringBuffer sb = new StringBuffer();for (String s : ss) {sb.append(s);}//排除这种请款:nums = [0, 0]String res = sb.toString();int k = 0;for (int i = 0; i < res.length(); i++) {if (i < res.length() - 1 && res.charAt(i) == '0') {k++;} else {break;}}return res.substring(k);}
}