题目链接:把数组排成最小的数
题目描述:输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
题目分析:
题目要求将数组排成一个最小的数,即对数组按照字符串的规则进行排序,规则如下:
1)两个数字的位数一样,则较大的数字排在右边;
2)两个数字的位数不一样,那么对于公有的位上的数字 ,对应位上数字较大的数排在右边;
3)对于情况2),若两个数字公有位的数字都一样,那么需要将两个数字对应的字符串分别作为首尾进行拼接,即将数字A和B分别拼接成AB和BA,对AB和BA进行比较,若AB较小,那么A在数组中排在坐标,B排在右边,反之,B排在左边,A排在右边。
即重写数组的sort方法。
js代码如下:
var minNumber = function(nums) {
const length=nums.length;
if(length==1)
return nums[0].toString();
nums.sort((a, b) => {
let strA = a.toString();
let strB = b.toString();
if (strA.length == strB.length)
return a - b;
else {
let i = 0;
while (i < strA.length && i < strB.length) {
if (strA[i] != strB[i])
return parseInt(strA[i]) - parseInt(strB[i]);
i++;
}
let num1 = parseInt(strA.slice(0) + strB.slice(0));
let num2 = parseInt(strB.slice(0) + strA.slice(0));
return num1-num2;
}
})
return nums.join('');