美文网首页
45.把数组排成最小的数(中等)

45.把数组排成最小的数(中等)

作者: 今天柚稚了么 | 来源:发表于2020-02-19 22:37 被阅读0次

    考点:本题考查时间效率

    题目描述

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

    思路一:全排列

    思路二:优化

    找到一个排序规则,数组根据这个规则排序之后能排成一个最小的数字。也就是比较两个数字m和n,确定一个规则判断m和n哪个应该排在前面,为了避免int型溢出的问题,将数字转换为字符串。

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Comparator;
    public class Solution {
        public String PrintMinNumber(int [] numbers) {
            int len = numbers.length;
             if (numbers == null || len == 0) {
                return "";
            }
            
            String str[] = new String[len];
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < len; i++) {
                str[i] = String.valueOf(numbers[i]);
            }
            //对字符串数组进行排序,传入比较规则,Arrays.sort可以传入一个comparator对象
            Arrays.sort(str, new Comparator<String>() {
                @Override
                public int compare(String s1, String s2) {
                    return (s1 + s2).compareTo(s2 + s1);//如果指定的数与参数相等返回0。如果指定的数小于参数返回 -1。如果指定的数大于参数返回 1。
                }
            });
           //拼接结果字符串
            for (int i = 0; i < len; i++) {
                sb.append(str[i]);//排好序的数组中的数字依次打印出来
            }
            return sb.toString();
        }
    }
    

    相关文章

      网友评论

          本文标题:45.把数组排成最小的数(中等)

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