# 题目
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
例如输入数组{3,32,321}
,则打印出这三个数字能排成的最小数字为321323
。
# 思路
定义一种新的排序规则,将整个数组重新排序:
a
和b
两个数字可以有两种组合:ab
和ba
,若ab<ba
则ab
应该排在ba
前面,否则ab
应该排在ba
后面。
使用数组的sort
方法,底层是快排,也可以手写一个快排。
sort
方法接收一个比较函数,compareFunction
:如果compareFunction(a, b)
小于0
,那么a
会被排列到b
之前;
# 代码
function PrintMinNumber(numbers) {
if (!numbers || numbers.length === 0) {
return "";
}
return numbers.sort(compare).join('');
}
function compare(a, b) {
const front = "" + a + b;
const behind = "" + b + a;
return front - behind;
}