0
点赞
收藏
分享

微信扫一扫

若依从0到1部署

寻找最大数的逻辑简单,但如何对两数比较组成更大的整数是一个重点。例如示例2中如何区分3与30谁放在前面以及3与34谁放在前面是一个难点,本文通过采用functools中的自定义排序规则cmp_to_key()来判断上述情况,并给出代码实现。

示例:

图1 最大数输入输出示例 

代码:

class Solution:
    def largestNumber(self, nums: List[int]) -> str:
        for i, num in enumerate(nums):
            nums[i] = str(num)
        
        def compare(n1, n2):
            if n1 + n2 > n2 + n1:
                return -1
            elif n1 + n2 < n2 + n1:
                return 1
            else:
                return 0

        nums = sorted(nums, key = cmp_to_key(compare))

        return str(int("".join(nums)))

 解释:

1)题目为防止输出结果过大,要求输出字符串,于是先将数组元素转换为字符串:

        for i, num in enumerate(nums):

                nums[i] = str(num)

2)然后即对nums数组排序,排序方式通过functools中cmp_to_key()进行自定义,自定义函数即为cmp_to_key()的参数compare:

        nums = sorted(nums, key = cmp_to_key(compare))

3)compare函数设置排序规则选择能组成更大整数的排序形式,返回-1为不变,返回1为相反。

        def compare(n1, n2):

                if n1 + n2 > n2 + n1:

                        return -1

                elif n1 + n2 < n2 + n1:

                        return 1

                else:

                        return 0

关于cmp_to_key()的用法和详细解释可见:

自定义排序规则:functools.cmp_to_key(callable)-CSDN博客

举报

相关推荐

0 条评论