Medium | 剑指 Offer 45. 把数组排成最小的数

剑指 Offer 45. 把数组排成最小的数

难度中等141

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

示例 1:

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

示例 2:

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

提示:

  • 0 < nums.length <= 100

解题思路

关键实际上在排序, 这里排序直接比较两个字符串拼接后的大小, 不是直接比较字符串

public String minNumber(int[] nums) {
    StringBuilder res = new StringBuilder();
    List<String> numList = new ArrayList<>(nums.length);
    for (int num : nums) {
        numList.add(String.valueOf(num));
    }
    numList.sort((o1, o2) -> {
        return (o1+o2).compareTo(o2+o1);
    });
    for (String numStr : numList) {
        res.append(numStr);
    }
    return res.toString();
}
原文地址:https://www.cnblogs.com/chenrj97/p/14283478.html