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)
京公网安备 11010502036488号