美文网首页剑指offer
32-把数组排成最小的数

32-把数组排成最小的数

作者: 马甲要掉了 | 来源:发表于2020-05-24 22:48 被阅读0次

    题目描述

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

    思路

    本题关键点是制定排序规则,设计比较器;
    排序规则如下:
    若ab > ba 则 a > b,
    若ab < ba 则 a < b,
    若ab = ba 则 a = b;
    例如:比较3和31时,'331' > '313',所以返回结果是'3' > '31'。
    根据指定排序规则对数组进行排序,然后从小到大拼接即为所求结果。

    代码如下

    function PrintMinNumber(numbers)
    {
        numbers.sort((a,b)=>{
             let m = a+''+b;
             let n = b+''+a;
             for(let i=0;i<m.length;i++){
                 if(m[i]>n[i]){
                     return 1;
                 }
                 if(m[i]<n[i]){
                     return -1;
                 }
            }
            return 1;
        })
        let str = '';
        for(let i=0;i<numbers.length;i++){
            str += numbers[i];
        }
        return str;
    }
    

    相关文章

      网友评论

        本文标题:32-把数组排成最小的数

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