สมมติว่ามีรายการจำนวนเต็มไม่ติดลบ เราต้องจัดเรียงให้พวกมันสร้างตัวเลขที่ใหญ่ที่สุด ตัวอย่าง ถ้าอาร์เรย์คือ [10, 2] ตัวเลขที่ใหญ่ที่สุดจะเป็น 210
ขั้นตอนการทำงาน
- จัดเรียงตัวเลขที่ตัวเลขหลักสำคัญ (most significant digits) มากกว่าวางไว้ก่อน จัดเรียงตัวเลขเหล่านั้น หลังจากนั้นรวมตัวเลขจากอาร์เรย์
ตัวอย่างโค้ด
from functools import cmp_to_key
class Solution(object):
def largestNumber(self, nums):
for i in range(len(nums)):
nums[i] = str(nums[i])
nums.sort(key=cmp_to_key(lambda x, y: self.compare(x, y)))
return "".join(nums).lstrip("0") or "0"
def compare(self, x, y):
if x + y < y + x:
return 1
elif x + y == y + x:
return 0
else:
return -1
ob1 = Solution()
print(ob1.largestNumber([3, 30, 5, 6, 8]))
อินพุต
[3,30,5,6,8]
เอาต์พุต
"865330"