32. 把数组排成最小的数

题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。


思路
将数组中的数字连接起来,排成一个最小的数字。将'大数'往后放'小数'往前放,如何定义'大数'和'小数'?比如说有两个数a和b,如果ab>ba则a是'大数'b是'小数',要排成ba。
于是,这道题目变成了一个排序问题,将能把组合出来的数字变大的数字往后排。我们这里需要自己定义一个比大小的比较方法。用冒泡排序,可以解决此题。


代码实现

# -*- coding:utf-8 -*-
class Solution:
    def PrintMinNumber(self, numbers):
        # write code here
        length = len(numbers)
        if (length == 0):
            return ''
        str_num = [str(i) for i in numbers]
        for i in range(length-1):
            for j in range(length - i - 1):
                if int(str_num[j]+str_num[j+1]) > int(str_num[j+1]+str_num[j]):
                    str_num[j], str_num[j+1] = str_num[j+1], str_num[j] # Python 交换两个数不用中间变量
        num = ''.join(i for i in str_num)
        #等价于
        #num = ''
        #for i in str_num:
            #num += i
        return int(num)