题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路:将数字转成str,比较拼接后的str的大小
自定义一个比较函数
sorted(cmp=compare),它可以接收一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素 x, y,如果 x 应该排在 y 的前面,返回 -1,如果 x 应该排在 y 的后面,返回 1。如果 x 和 y 相等,返回 0
# -*- coding:utf-8 -*-
class Solution:
def PrintMinNumber(self, numbers):
# write code here
# 思路:将数字转成str,比较拼接后的str的大小
# 自定义一个比较函数
#sorted(cmp=compare),它可以接收一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素 x, y,如果 x 应该排在 y 的前面,返回 -1,如果 x 应该排在 y 的后面,返回 1。如果 x 和 y 相等,返回 0。
from functools import cmp_to_key
def compare(str1,str2):
# 新定义排序规则
if str1+str2>str2+str1:return 1
elif str1+str2<str2+str1:return -1
else:return 0
if len(numbers)==0:return ''
numbers=list(map(str,numbers))
numbers.sort(key=cmp_to_key(compare))
return ''.join(numbers)