把数组排成最小的数

题目

把数组排成最小的数

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

解题思路

  1. 最直接的办法就是,找到数组中数字的所有排列组合,找到最小的
  2. 对于 $$m, n$$,可以组成 $$mn , nm$$ 这两个数,如果 $$mn < nm$$ 那么,$$m$$ 应该在 $$n$$ 之前
  3. 对于一组数,可以通过上述规则进行排序,依次打印出来就是最小的数
  4. 由于组合之后的数可能超出 int 的表示范围,注意使用字符串来处理大数问题
  1. public String PrintMinNumber(int[] numbers) {
  2. List<String> nums = new ArrayList<>();
  3. for (int number : numbers) {
  4. nums.add(String.valueOf(number));
  5. }
  6. nums.sort(Comparator.comparing(s -> s, (o1, o2) -> (o1 + o2).compareTo(o2 + o1)));
  7. StringJoiner joiner = new StringJoiner("");
  8. nums.forEach(joiner::add);
  9. return joiner.toString();
  10. }