题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路
- 先将数组变成字符型(以防拼接后溢出,往往面对大数问题,都是先将数字转换成字符串)
- 两两字符拼接后排序,重新定义排序规则(拼接后较小的值放在前面)
- 排完序后,拼接整个数组即为最小数字
# -*- coding:utf-8 -*-
class Solution:
def PrintMinNumber(self, numbers):
# write code here
if not numbers:
return ""
num=map(str,numbers)#通过map函数将数组映射成字符型
num.sort(lambda x,y: cmp(x+y,y+x))#cmp自定义比较函数
#sort函数就地排序
#num=sorted(num,lambda x,y: cmp(x+y,y+x))
#sorted函数创建了一个新的列表,原列表不变
return "".join(num)
cmp
如排【22,11,3】
2211 1122:11应该排在22前面
113 311:11应该排在3前面
322 223:22应该排在3前面
所以最终排序结果:【11,22,3】
测试用例
if __name__=='__main__':
s=Solution()
numbers=[3,32,321]
print(s.PrintMinNumber(numbers))