把數組排成最小的數之python自定義排序

題目 把數組排成最小的數

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

題解:

  1. 自定義排序規則
  2. 防止數據過大造成溢出

代碼:

class Solution:
    def PrintMinNumber(self, numbers):
        len_n = len(numbers)
        if len_n == 0: return ''
        numbers = list(map(str, numbers))

        def str_cmp(s1, s2):
            if s1 > s2:
                return 1  # 調換順序
            else:
                return -1
        from functools import cmp_to_key
        key_fun = cmp_to_key(lambda x,y: str_cmp(x+y,y+x))  # 防溢出
        # key_fun = cmp_to_key(lambda x, y: int(x+y) - int(y+x))
        numbers.sort(key=key_fun)
        return ''.join(numbers).lstrip('0') or '0'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章