把数组排成最小的数
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
解题思路:
我的冒泡程序:
# -*- coding:utf-8 -*-
class Solution:
def PrintMinNumber(self, numbers):
# write code here
res = ""
if len(numbers)==0:
return res
for i in range(len(numbers)-1):
for j in range(i+1,len(numbers)):
if int(str(numbers[i])+str(numbers[j])) >= int(str(numbers[j]) + str(numbers[i])):
numbers[i], numbers[j] = numbers[j], numbers[i]
res += str(numbers[i])
res += str(numbers[-1])
return int(res)
大神的快排(虽然没通过,但是思路是快排的思路):
def strSort(self, list):
if len(list) <= 1:
return list
left = self.strSort([i for i in list[1:] if (i+list[0]) < (list[0]+i)])
right = self.strSort([i for i in list[1:] if i+list[0] >= list[0] + i])
return left+[list[0]]+right
以及正经八百的快排程序:
def quick_sort(self, list):
if len(list) < 2:
return list[:]
left = (self.quick_sort([i for i in list[1:] if i <= list[0]]))
right = (self.quick_sort([i for i in list[1:] if i > list[0]]))
return left + [list[0]] + right