题目:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路:
自定义排序规则(Python2)
代码:
class Solution:
def PrintMinNumber(self, numbers):
def cmp(a, b):
if str(a)+str(b) > str(b)+str(a):
return 1
elif str(a)+str(b) < str(b)+str(a):
return -1
else:
return 0
return ''.join(map(str, sorted(numbers, cmp)))
简化写法:
class Solution:
def PrintMinNumber(self, numbers):
if not numbers: return ""
numbers = list(map(str, numbers))
numbers.sort(cmp=lambda x, y: cmp(x + y, y + x))
return "".join(numbers).lstrip('0') or'0'