題目 把數組排成最小的數
輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。例如輸入數組{3,32,321},則打印出這三個數字能排成的最小數字爲321323。
題解:
- 自定義排序規則
- 防止數據過大造成溢出
代碼:
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'