我有这个代码适用于这个数组:['45','30','50','1']。
function penalty(a_list) {
return a_list.sort((a, b) => a - b).join('');
}
例如:假设a_list是['45','30','50','1'],最小的可能字符串将是'1304550',这是正确的,但是如果a_list是['32', '3']给出这个当前代码,我将得到'332',这是不正确的,因为'323'是最小的可能字符串。希望有所帮助。
答案 0 :(得分:6)
您可以采用a
和b
的连续值以及b
和a
的值,并将其三角形用于排序,这反映了排序顺序这两个字符串的值较小,以便以后加入。
如果提供了整数,则需要在排序回调中将值转换为字符串。
function sort(a, b) {
return (a + b) - (b + a);
}
console.log([['45', '30', '50', '1'], ['32', '3']].map(a => a.sort(sort).join('')));
对于稳定排序,您可以将较小的值移动到顶部(这不会影响以后加入的字符串)。这会在'3'
之前对'33'
进行排序。
function sort(a, b) {
return (a + b) - (b + a) || a - b;
}
console.log([['45', '30', '50', '1'], ['32', '3']].map(a => a.sort(sort).join('')));