我有这段代码适用于这个数组:['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' 是可能的最小字符串。希望有所帮助。
最佳答案
您可以采用 a
和 b
的连接值以及 b
和 a
的值并取它用于排序的增量,它反射(reflect)了两个字符串的排序顺序,以获得较小的值以便稍后加入。
如果提供整数,则需要在排序回调中将值转换为字符串。
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('')));
关于javascript - 从数组javascript返回可能的最小连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47378471/