Loading

剑指offer[32]——把数组排成最小的数

题目描述

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

JavaScript中有自带的sort函数,我们只需要定义其中排序的规则即可进行排序,分为以下几种情况:

  1. 前一个数字的首位小于第二个数字的首位,位置不用变换
  2. 前一个数字的首位大于第二个数字的首位,位置交换
  3. 相邻两个数字的首位相等,则将两个数字拼接起来,与调换顺序的数字拼接大小相比,看数值大小决定是否交换
function PrintMinNumber(numbers)
{
    if(numbers.length==0){return '';}
    numbers = numbers.sort((a,b)=>{
        a = String(a);
        b = String(b);
        if(a[0]<b[0]){return -1;}
        else if(a[0]>b[0]) {return 1;}
        else{
            return parseInt([a,b].join(''))<parseInt([b,a].join(''))?-1:1;
        }
    })
    return parseInt(numbers.join(''));
}
posted @ 2020-03-24 22:10  Jacob是我了  阅读(153)  评论(0编辑  收藏  举报