from functools import cmp_to_key
定义cmp规则:
from functools import cmp_to_key
def cmp(a, b):
if a < b:
return -1
elif a == b:
return 0
else:
return 1
nums = [1, 2, 1, 4]
nums = sorted(nums, key = cmp_to_key(cmp))
print(nums)
如上就实现了升序排序
[1, 1, 2, 4]
只需要看return是-1的时候,传进来的a,b符合返回值是-1时的排序情况。
剑指 Offer 45. 把数组排成最小的数
输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
示例 1:
输入: [10,2]
输出: “102”
示例 2:
输入: [3,30,34,5,9]
输出: “3033459”
说明:
输出结果可能非常大,所以你需要返回一个字符串而不是整数 拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0
class Solution:
def minNumber(self, nums: List[int]) -> str:
from functools import cmp_to_key
def cmp(a, b):
if int(str(a) + str(b)) < int(str(b) + str(a)):
return -1
elif int(str(a) + str(b)) == int(str(b) + str(a)):
return 0
else:
return 1
sorted_num = sorted(nums, key = cmp_to_key(cmp))
sorted_num = [str(num) for num in sorted_num]
return "".join(sorted_num)```