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

2021-12-26  本文已影响0人  itbird01
题目.png

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

解题思路

解法1:
1.分析题意,实际上是找一个规则,对数组进行排序,然后将数组拼接为一个字符串,输出即可
2.规则是什么呢?我们知道正常int数组排序,按照大小来排序,现在我们对比两个数字x、y,而是要比较他们组成的数字哪个较大x在前y在后 ??? x在后y在前,规则我们这里就找到了
3.将数组转换为list<String>链表,然后使用Collections对list进行重新排序,规则按照2来编写即可

解题遇到的问题

后续需要总结学习的知识点

##解法1
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

class Solution {
    public static void main(String[] args) {
        System.out.println(minNumber(new int[]{3, 30, 34, 5, 9}));
    }
    public static String minNumber(int[] nums) {
        List<String> list = new ArrayList<String>();
        for (int i = 0; i < nums.length; i++) {
            list.add(String.valueOf(nums[i]));
        }

        Collections.sort(list, new Comparator<String>() {

            @Override
            public int compare(String o1, String o2) {
                if (new BigInteger(o1 + o2)
                        .compareTo(new BigInteger(o2 + o1)) == 1) {
                    return 1;
                } else if (new BigInteger(o1 + o2)
                        .compareTo(new BigInteger(o2 + o1)) == -1) {
                    return -1;
                } else {
                    return 0;
                }
            }
        });
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < list.size(); i++) {
            builder.append(list.get(i));
        }
        return builder.toString();
    }
}
上一篇 下一篇

猜你喜欢

热点阅读