给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
示例 1:
输入:nums = [10,2]
输出:"210"
示例 2:
输入:nums = [3,30,34,5,9]
输出:"9534330"
提示:
1 <= nums.length <= 100
0 <= nums[i] <= 109
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/largest-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
import random
class Solution:
def cmp(self,x:int,y:int):
"if x>=y return True, else return False"
if int(str(x)+str(y)) >= int(str(y)+str(x)):
return True
else:
return False
def quick_sort(self,nums:list,left:int,right:int):
if left >= right:
return nums
qviot_index = random.randint(left,right)
temp_value = nums[qviot_index]
little = []
larger = []
for i in range(left,right+1):
if i == qviot_index:
continue
num = nums[i]
if self.cmp(num,temp_value):
larger.append(num)
else:
little.append(num)
larger.insert(0,nums[qviot_index])
temp = little + larger
for i in range(left,right+1):
nums[i] = temp[i-left]
nums = self.quick_sort(nums,left,left+len(little)-1)
nums = self.quick_sort(nums,left+len(little)+1,right)
return nums
def largestNumber(self, nums: List[int]) -> str:
if min(nums) == 0 and max(nums) == 0:
return '0'
nums = self.quick_sort(nums,0,len(nums)-1)
nums.reverse()
result = ''
for i in range(len(nums)):
result += f"{nums[i]}"
return result