题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印拼接出所有数字汇总最小的一个。
def min_arry_num(nums):
res = nums_sort(nums)
return ''.join(res)
def nums_sort(nums):
nums = [str(num) for num in nums]
if len(nums)==1:
return nums
if len(nums)<1:
return []
left = []
right = []
res = nums[0]
for num in nums:
if compare(num,res)<0:
left.append(num)
if compare(num, res) > 0:
right.append(num)
return nums_sort(left) +[res]+nums_sort(right)
def compare(str1,str2):
s1 = str1+str2
s2 = str2+str1
if s1<s2:
return -1
elif s2<s1:
return 1
else:
return 0
nums = [3,32,321,111,123]
print(min_arry_num(nums))
注:
主要思路是构造一个自定义排序规则,使用快速排序的思想,进行自定义排序。比较两个字符串大小规则是两者前后拼接两种情况,拼接后小的字符串,排在前面的比后面的小。