把数组排成最小的数

Problem description

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组 {3,32,321},则打印出这三个数字能排成的最小数字为 321323。

Solution

直接拼接数字的话比较会存在溢出问题,曲线解决。转换为字符串。比较时用comparator。关于comparator的compare()正常s1 > s2返回大于0的数,这是递增排序。若s1 > s2返回小于0 的数,递减排列。
关于lambda表达式: x -> 2 * x 接收一个参数(数字类型),返回其2倍的值 只有一行代码时省略了

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
public String PrintMinNumber(int[] numbers) {
if (numbers == null || numbers.length == 0)
return "";
int n = numbers.length;
String[] nums = new String[n];
for (int i = 0; i < n; i++)
nums[i] = numbers[i] + "";
Arrays.sort(nums, (s1, s2) -> (s1 + s2).compareTo(s2 + s1));
StringBuilder ret = new StringBuilder();
for (String str : nums)
ret.append(str);
return ret.toString();
}
文章目录
  1. 1. Problem description
    1. 1.1. 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组 {3,32,321},则打印出这三个数字能排成的最小数字为 321323。
  2. 2. Solution
  3. 3. Code
|