题目 把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{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'