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_num
はx+y > y+x
これはずっと並べ替えられている値ですか?
Reference
この問題について(179. Largest Number - python3), 我々は、より多くの情報をここで見つけました
https://velog.io/@jsh5408/179.-Largest-Number-python3
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
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
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
Reference
この問題について(179. Largest Number - python3), 我々は、より多くの情報をここで見つけました https://velog.io/@jsh5408/179.-Largest-Number-python3テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol