问题描述
给定一个整形数组,要求将数组中的元素进行拼接,返回拼接后的数字最大的值。题目链接:**点我**
样例输入输出
输入:nums = [10,2]
输出:210
输入:nums = [3,30,34,5,9]
输出:9534330
问题解法
将数组中整数转成字符串,然后用字符串进行比较,如果 a + b
比 b + a
, 则 a
放前面,b
放后面。排序后,将字符串进行连接就是最终的结果。需要注意的是前置 0 的情况,需要将前置 0 进行排除。代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| class Solution { public String largestNumber(int[] nums) { String result = Arrays.stream(nums).mapToObj(String::valueOf).sorted((a, b) -> (b + a).compareTo(a + b)).collect(Collectors.joining()); int index = 0; for (int i = 0; i < result.length() - 1; i++) { if (result.charAt(i) == '0' && result.charAt(i + 1) == '0') { index = i + 1; }
if (result.charAt(i) != '0') { break; } } return result.substring(index); } }
|