美文网首页剑指offer- python实现
面试题45:把数组排成最小的数

面试题45:把数组排成最小的数

作者: 不会编程的程序猿甲 | 来源:发表于2020-03-25 22:58 被阅读0次

    题目:
    输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

    思路:
    将数字转换为字符串后进行自定义排序(使得按照字符串拼接的从小到大的顺序排列)设计比较大小的规则为 若 ab > ba 则 b应该在a前面。
    cmp(x,y) 函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。排序默认是从小到大,在这个函数内部实现的两两排序。

    代码:

    # -*- coding:utf-8 -*-
    class Solution:
        def PrintMinNumber(self, numbers):
            # write code here
            if not numbers or len(numbers)==0:
                return ""
            str_numbers = [str(i) for i in numbers]  #转换为字符串
            res = sorted(str_numbers, cmp = lambda x,y:cmp(x+y, y+x)) 
            #首先要理解cmp函数,a<b 返回1,a>b 返回-1,sort的cmp参数:当为正时交换两个
            #元素,否则,保持原样。因此这句话可以排序选择出小的组合
            return ''.join(res)
    

    提交结果:

    相关文章

      网友评论

        本文标题:面试题45:把数组排成最小的数

        本文链接:https://www.haomeiwen.com/subject/sapfuhtx.html