思路
使用arr.sort()函数,函数中排序方法可以由自己写。对于x,y两个数,如果x和y拼接而成的字符串x+y<y和x拼接而成的字符串y+x,则x在前,y在后,反之,x在后,y在前。
代码
/**
* @param {number[]} nums
* @return {string}
*/
var minNumber = function(nums) {
var res = '';
nums.sort(function(a, b) {
if(parseInt(''+ a + b) < parseInt('' + b + a)) return -1;
if(parseInt(''+ a + b) < parseInt('' + b + a)) return 1;
return 0;
});
for(let i = 0; i < nums.length; i++) {
res += nums[i];
}
return res;
};
js知识点
语法:
arr.sort([compareFunction])
如果没有指明 compareFunction ,那么元素会按照转换为的字符串的诸个字符的Unicode位点进行排序。例如 “Banana” 会被排列到 “cherry” 之前。当数字按由小到大排序时,9 出现在 80 之前,但因为(没有指明 compareFunction),比较的数字会先被转换为字符串,所以在Unicode顺序上 “80” 要比 “9” 要靠前。
如果指明了 compareFunction ,那么数组会按照调用该函数的返回值排序。即 a 和 b 是两个将要被比较的元素:
- 如果 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前;
- 如果 compareFunction(a, b) 等于 0 , a 和 b 的相对位置不变。
- 如果 compareFunction(a, b) 大于 0 , b 会被排列到 a 之前。
compareFunction(a, b) 必须总是对相同的输入返回相同的比较结果,否则排序的结果将是不确定的。