45-把数组排成最小的数
题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印拼接出所有数字汇总最小的一个。
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))
注:
主要思路是构造一个自定义排序规则,使用快速排序的思想,进行自定义排序。比较两个字符串大小规则是两者前后拼接两种情况,拼接后小的字符串,排在前面的比后面的小。