美文网首页
面试题45_把数组排成最小的数

面试题45_把数组排成最小的数

作者: shenghaishxt | 来源:发表于2020-02-24 16:47 被阅读0次

题目描述

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

题解

依据贪心的思想,两两比较数字之间的组合,将结果小的放置在前面。为了方便操作,首先将数字转换为字符串。

但什么样的字符串最小?题目要求的是我们找到一个排序规则,根据这个排序规则,排成一个最小的数字。为此,对于str1和str2,将它们拼接起来,有两种拼接方法,分别是 str1+str2 和 str2+str1 。直接比较这两种拼接结果,定义为一个新的排序规则。

class Solution {
    public String minNumber(int[] nums) {
        String[] strings = new String[nums.length];
        for (int i = 0; i < nums.length; i++) {
            strings[i] = String.valueOf(nums[i]);
        }
        Arrays.sort(strings, new Comparator<String>() {
            @Override
            public int compare(String str1, String str2) {
                // 如果(str1+str2) < (str2+str1),那么结果为负数,str1排在str2前面
                // 如果(str1+str2) > (str2+str1),那么结果为正数,str2排在str1前面
                return (str1+str2).compareTo(str2+str1);
            }
        });
        StringBuilder sb = new StringBuilder();
        for (String string : strings)
            sb.append(string);
        return sb.toString();
    }
}

相关文章

  • 面试题45_把数组排成最小的数

    题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 题解 依据...

  • 面试题33:把数组排成最小的数

    面试题33:把数组排成最小的数 题目 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数...

  • 手撕数组

    【面试题51:数组中重复的数字】 【面试题32:求从1到n的整数中1出现的次数】 【面试题33:把数组排成最小的数...

  • 把数组排成最小的数

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

  • 把数组排成最小的数

    题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{...

  • 把数组排成最小的数

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

  • 把数组排成最小的数

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

  • 把数组排成最小的数

    问题描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例...

  • 把数组排成最小的数

    题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{...

  • 把数组排成最小的数

    题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组...

网友评论

      本文标题:面试题45_把数组排成最小的数

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