劍指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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章