179. Largest Number - python3

2385 ワード

179. Largest Number


Given a list of non-negative integers nums, arrange them such that they form the largest number.
Note: The result may be very large, so you need to return a string instead of an integer.

My Answer 1: Wrong Answer (54 / 227 test cases passed.)

class Solution:
    def largestNumber(self, nums: List[int]) -> str:
        if len(nums) == 1:
            return str(nums[0])
        result = ""
        order = []
        
        # 정렬
        for i in range(len(nums)):
            num = int(str(nums[i])[0])
            for j in range(i+1, len(nums)):
                num2 = int(str(nums[j])[0])
                if num > num2:
                    nums[i], nums[j] = nums[i], nums[j]
        
        for i in range(len(nums)-1, -1, -1):
            if nums[i] == -1:
                continue
            num = str(nums[i])
            turn = 0
            for j in range(i-1, -1, -1):
                print(nums[i], nums[j])
                num2 = str(nums[j])
                if nums[j] == -1:
                    continue
                elif num[0] != num2[0]:
                    result += str(nums[i])
                    nums[i] = -1
                    break
                else:
                    if num[-1] > num2[-1]:
                        turn = 1
                    else:
                        result += str(nums[j])
                        nums[j] = -1
            if turn:
                result += str(nums[i])
                nums[i] = -1

        for num in nums:
            if num > -1:
                result += str(num)
        
        print(nums)
        
        return result
一番前の値を基準に並べ替えてみて、一番後ろから結果に入れてみました.
あまりにも汚れていたのでルーツが見えました

Solution 1: Runtime: 36 ms - 81.89% / Memory Usage: 14.4 MB - 31.76%

class LargerNumKey(str):
    def __lt__(x, y):
        return x+y > y+x

class Solution:
    def largestNumber(self, nums: List[int]) -> str:
        largest_num = ''.join(sorted(map(str, nums), key=LargerNumKey))
        return '0' if largest_num[0] == '0' else largest_num
超簡単でビックリ^^;この点を完全に理解できない...LargerNumKeyというレベルを作りました...
でもなぜx+yを使うのか…?largest_numx+y > y+xこれはずっと並べ替えられている値ですか?