输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
def sorted_role(x, y): # 比较规则函数
if int(str(x) + str(y)) < int(str(y) + str(x)): # 对列表中两个元素拼接成的数字进行比较
return -1 # ,确定相邻两个元素的先后位置,(返回-1 表示 前边权重小,后边权重大)
if int(str(x) + str(y)) == int(str(y) + str(x)):# 使得列表顺序为组成数字最小的顺序
return 0
if int(str(x) + str(y)) > int(str(y) + str(x)):
return 1
def PrintMinNumber(numbers):
if not numbers: # 列表中没有数据返回空值
return ""
numbers = sorted(numbers, cmp = sorted_role) # 重新定义的排序规则生效。(权重由小到大依次排列)
return ‘‘.join([str(i) for i in numbers]) #将排好序的列表元素转化为字符串拼接起来,返回
from functools import cmp_to_key
from functools import cmp_to_key # 导入需要使用的工具
def sorted_role(x, y): # 重新定义的比较规则函数
if int(str(x) + str(y)) < int(str(y) + str(x)):
return -1 # xy - yx < 0 时,应该 x在前, y 在后, 返回负值
if int(str(x) + str(y)) == int(str(y) + str(x)):
return 0
if int(str(x) + str(y)) > int(str(y) + str(x)):
return 1 # xy - yx > 0 时,应该 y在前, x 在后, 返回正值
def PrintMinNumber(numbers):
#key=cmp_to_key(sorted_role):启动新的排序规则
numbers.sort(key=cmp_to_key(sorted_role))
return ‘‘.join([str(i) for i in numbers])
from functools import cmp_to_key # 导入需要使用的工具
def PrintMinNumber(numbers):
# 定义匿名函数:当 ab - ba < 0时,a应该在前,b在后,返回负值。
cmp = lambda a, b: int(str(a) + str(b)) - int(str(b) + str(a))
numbers.sort(key=cmp_to_key(cmp))
return ‘‘.join([str(i) for i in numbers])
[Python]-输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
原文:https://www.cnblogs.com/wangxiaowu/p/12865519.html