LeetCode 179.Largest Number
在没有查阅资料的情况下,花不连续的两天时间想出来,也对得起还没转行成功的我了,记录一下
对字符串进行快速排序,快速排序时,选取nums_s[-1]作为基准点,取出一个元素时,
along = nums_s[-1] + nums_s[i] # 顺向相连
reverse = nums_s[i] + nums_s[-1] # 逆向相连
然后对比两个字符串相对应位置上的字符大小,如果along = reverse,证明先后顺序没有影响;若出现along[j] > reverse[j] ,则nums_s[i] 在 nums_s[-1]的右侧;若出现along[j] > reverse[j],nums_s[i] 在 nums_s[-1]的左侧。代码如下:
class Solution:
def largestNumber(self, nums: List[int]) -> str:
def quick_sort(nums_s):
left = list()
right = list()
cur = list()
if len(nums_s) < 2: return nums_s
cur.append(nums_s[-1])
along = ''
reverse = ''
for i in range(len(nums_s) - 1):
along = nums_s[-1] + nums_s[i]
reverse = nums_s[i] + nums_s[-1]
if along == reverse:
cur.append(nums_s[i])
continue
for j in range(len(along)):
if along[j] > reverse[j]:
right.append(nums_s[i])
break
elif along[j] < reverse[j]:
left.append(nums_s[i])
break
return quick_sort(left) + cur + quick_sort(right)
if sum(nums) == 0: return '0'
nums_s = [str(x) for x in nums]
s = quick_sort(nums_s)
return ''.join(s)
好了,继续学习