剑指Offer 32. 把数组排成最小的数 (数组)

Posted on 2018-10-16 10:59  _hqc  阅读(143)  评论(0编辑  收藏  举报

题目描述

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

题目地址

https://www.nowcoder.com/practice/8fecd3f8ba334add803bf2a06af1b993?tpId=13&tqId=11185&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

思路

首先将数组中的数字全部转换为字符串存储在一个新的数组中,然后比较每两个数字串的拼接的mn和nm的大小,若mn<nm,则m更小,反之n更小,然后把更小的数放入一个新的List中,最后输出即可。使用冒泡排序很方便。

Python

# -*- coding:utf-8 -*-
class Solution:
    def PrintMinNumber(self, numbers):
        # write code here
        if not numbers:
            return ''
        s = [str(num) for num in numbers]
        for i in range(len(numbers)-1):
            for j in range(i+1,len(numbers)):
                if s[i]+s[j] > s[j]+s[i]:
                    s[i],s[j] = s[j],s[i]
        s = ''.join(s)
        return s
if __name__ == '__main__':
    result = Solution().PrintMinNumber([3,5,1,4,2])
    print(result)