把数组排成最小的数

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。

示例 1:

输入: [10,2]
输出:102"

示例 2:

输入: [3,30,34,5,9]
输出:3033459"

提示:

  • 0 < nums.length <= 100

说明:

  • 输出结果可能非常大,所以你需要返回一个字符串而不是整数
  • 拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution {
public String minNumber(int[] nums) {
NumNode[] numNode = new NumNode[nums.length];
for (int i = 0; i < nums.length; i++) {
numNode[i] = new NumNode(nums[i] + "");
}
Arrays.sort(numNode);
//流 比较优雅,但却不是最快
//return Arrays.stream(numNode).map(i -> i.string).collect(Collectors.joining(""));
StringBuffer buffer = new StringBuffer();
for (NumNode node : numNode) {
buffer.append(node.string);
}
return buffer.toString();
}

class NumNode implements Comparable<NumNode>{
public NumNode(String string) {
this.string = string;
}
public String string;
@Override
public int compareTo(NumNode o) {
return (int) (Long.parseLong(string + o.string) - Long.parseLong(o.string + string));
}
}
}