1. 程式人生 > >劍指offer 32. 把陣列排成最小的數

劍指offer 32. 把陣列排成最小的數

原題

題目:

輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{3,32,321},則打印出這三個數字能排成的最小數字為321323。

Answer

思路分析

位元組轉化成排列組合做,用回溯法,得到所有的排列可能後再轉換為int,輸出最小值。

# -*- coding:utf-8 -*-
class Solution:
    def PrintMinNumber(self, numbers):
        # write code here
        if not numbers:
            return ""
        res = []
        path = ""
        temp = [str(x) for x in numbers]
        self.helper(temp, res, path)
        return min(res)

    def helper(self, numbers, res, path):
        if not numbers:
            res.append(int(path))
        else:
            for i in range(len(numbers)):
                self.helper(numbers[:i]+numbers[i+1:], res, path+numbers[i])