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)