剑指offer_数组_把数组排成最小的数

把数组排成最小的数

题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
解题思路
在这里插入图片描述
我的冒泡程序:

# -*- coding:utf-8 -*-
class Solution:
    def PrintMinNumber(self, numbers):
        # write code here
        res = ""
        if len(numbers)==0:
            return res
        for i in range(len(numbers)-1):
            for j in range(i+1,len(numbers)):
                if int(str(numbers[i])+str(numbers[j])) >= int(str(numbers[j]) + str(numbers[i])):
                    numbers[i], numbers[j] = numbers[j], numbers[i]
            res += str(numbers[i])
        res += str(numbers[-1])
        return int(res)

大神的快排(虽然没通过,但是思路是快排的思路):

def strSort(self, list):
    if len(list) <= 1:
        return list
    left = self.strSort([i for i in list[1:] if (i+list[0]) < (list[0]+i)])
    right = self.strSort([i for i in list[1:] if i+list[0] >= list[0] + i])
    return left+[list[0]]+right

以及正经八百的快排程序:

def quick_sort(self, list):
    if len(list) < 2:
        return list[:]
    left = (self.quick_sort([i for i in list[1:] if i <= list[0]]))
    right = (self.quick_sort([i for i in list[1:] if i > list[0]]))
    return left + [list[0]] + right
发布了31 篇原创文章 · 获赞 0 · 访问量 708

猜你喜欢

转载自blog.csdn.net/freedomUSTB/article/details/105231657