题目描述:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
解题方案:
采用内置函数sorted(),其中使用匿名函数定义数字的排列规则。sorted()内置函数有三个关键字:cmp,key,reverse。
# -*- coding:utf-8 -*-
class Solution:
def PrintMinNumber(self, numbers):
# write code here
if not numbers:
return ''
lmb = lambda n1, n2:int(str(n1)+str(n2))-int(str(n2)+str(n1))
array = sorted(numbers, cmp = lmb)
return ''.join([str(i) for i in array])
使用排列组合,输出最小值:
# -*- coding:utf-8 -*-
import itertools
class Solution:
def PrintMinNumber(self, numbers):
# write code here
if not numbers:
return ''
nums = []
list_num = list(itertools.permutations(numbers,len(numbers)))
for item in list_num:
num = ''.join(map(str,item))
nums.append(num)
return min(map(int,nums))