美文网首页
剑指 Offer 45 把数组排成最小的数

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

作者: itbird01 | 来源:发表于2021-12-26 22:29 被阅读0次
    题目.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();
        }
    }
    

    相关文章

      网友评论

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

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