美文网首页剑指 Offer Java版剑指offer
剑指Offer Java版 面试题45:把数组排成最小的数

剑指Offer Java版 面试题45:把数组排成最小的数

作者: 孙强Jimmy | 来源:发表于2019-07-31 21:00 被阅读3次

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

    练习地址

    https://www.nowcoder.com/practice/8fecd3f8ba334add803bf2a06af1b993

    参考答案

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    
    public class Solution {
        public String PrintMinNumber(int[] numbers) {
            if (numbers == null || numbers.length == 0) {
                return "";
            }
            ArrayList<String> numberList = new ArrayList<>();
            for (int number : numbers) {
                numberList.add(String.valueOf(number));
            }
            Collections.sort(numberList, new Comparator<String>() {
                @Override
                public int compare(String str1, String str2) {
                    String combine1 = str1 + str2;
                    String combine2 = str2 + str1;
                    return combine1.compareTo(combine2);
                }
            });
            StringBuilder sb = new StringBuilder();
            for (String number : numberList) {
                sb.append(number);
            }
            return sb.toString();
        }
    }
    

    复杂度分析

    • 时间复杂度:O(nlogn)。
    • 空间复杂度:O(n)。

    👉剑指Offer Java版目录
    👉剑指Offer Java版专题

    相关文章

      网友评论

        本文标题:剑指Offer Java版 面试题45:把数组排成最小的数

        本文链接:https://www.haomeiwen.com/subject/fosxdctx.html