描述:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
这道题实质上是一个排序题,不过元素之间的比较与常规方法不一样。比如说a,b,将a,b转换成字符并拼接成ab,ba,然后比较字符串ab,ba,确定它们之间的先后顺序,ab对应a,ba对应b。最后选择一个排序算法,这里我使用的是选择排序(并非最佳的排序算法)。
class Solution:
def PrintMinNumber(self, numbers):
if numbers == []:
return ''
minstr = ''
for i in range(len(numbers)):
min = numbers[i]
for j in range(i+1, len(numbers)):
num1 = str(min) + str(numbers[j])
num2 = str(numbers[j]) + str(min)
if num1 > num2:
min, numbers[j] = numbers[j], min
minstr = minstr + str(min)
return int(minstr)