• 把数组排成最小的数
    • 题目
    • 解题思路

    把数组排成最小的数

    题目

    把数组排成最小的数

    输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{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. }