剑指offer[32]——把数组排成最小的数
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
JavaScript中有自带的sort
函数,我们只需要定义其中排序的规则即可进行排序,分为以下几种情况:
- 前一个数字的首位小于第二个数字的首位,位置不用变换
- 前一个数字的首位大于第二个数字的首位,位置交换
- 相邻两个数字的首位相等,则将两个数字拼接起来,与调换顺序的数字拼接大小相比,看数值大小决定是否交换
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(''));
}
我不管,JS天下第一