บทความนี้สาธิตการจัดเรียงตัวเลขในอาร์เรย์ต่อกันเพื่อให้ได้ตัวเลขที่ใหญ่ที่สุดเป็นสตริง
ตัวอย่าง
input: [5, 45, 34, 9, 3] output: '9545343'
ตัวอย่างโค้ด
const arr = [5, 45, 34, 9, 3];
const largestNumber = (arr = []) => {
if (arr.every(n => n === 0)) {
return '0';
}
arr.sort((a, b) => {
const s1 = new String(a);
const s2 = new String(b);
const first = s1 + s2;
const second = s2 + s1;
if (first > second) {
return -1;
} else if (first < second) {
return 1;
}
return 0;
});
return arr.join('');
};
console.log(largestNumber(arr));
ผลลัพธ์
9545343
คำอธิบาย
เปรียบเทียบการต่อสตริง 2 แบบ: a+b vs b+a ใส่ตัวที่ให้ค่ามากกว่าก่อน
กรณีพิเศษ: หากทุกตัวเป็น 0 ให้คืน '0' ไม่ใช่ '000...'
นี่คือปัญหา "Largest Number" แบบคลาสสิก (LeetCode 179)