剑指Offer(Python多种思路实现):把数组排成最小的数

剑指Offer(Python多种思路实现):把数组排成最小的数

面试45题:

题:把数组排成最小的数

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

解题思路一:暴力破解:先求所有数字的全排列,然后求最小值

import itertools
class Solution:
    def PrintMinNumber(self, numbers):
        # write code here
        #暴力解法
        if len(numbers)<=0:
            return ""
        str_numbers=[str(i) for i in numbers]
        premu=itertools.permutations(str_numbers)
        res=[''.join(i) for i in premu]
        return min(res)

解题思路二:将数字转换为字符串后进行自定义排序

class Solution:
    def PrintMinNumber(self, numbers):
        # write code here
        #暴力解法
        if len(numbers)<=0:
            return ""
        str_numbers=[str(i) for i in numbers]
        res=sorted(str_numbers,cmp=lambda x,y:cmp(x+y,y+x))
        return ''.join(res)
发布了62 篇原创文章 · 获赞 6 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_44151089/article/details/104524744
今日推荐