美文网首页剑指 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