题目:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路:
将数字转换为字符串后进行自定义排序(使得按照字符串拼接的从小到大的顺序排列)设计比较大小的规则为 若 ab > ba 则 b应该在a前面。
cmp(x,y) 函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。排序默认是从小到大,在这个函数内部实现的两两排序。
代码:
# -*- coding:utf-8 -*-
class Solution:
def PrintMinNumber(self, numbers):
# write code here
if not numbers or len(numbers)==0:
return ""
str_numbers = [str(i) for i in numbers] #转换为字符串
res = sorted(str_numbers, cmp = lambda x,y:cmp(x+y, y+x))
#首先要理解cmp函数,a<b 返回1,a>b 返回-1,sort的cmp参数:当为正时交换两个
#元素,否则,保持原样。因此这句话可以排序选择出小的组合
return ''.join(res)
提交结果:
网友评论