剑指offer- python实现

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

2020-03-25  本文已影响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)

提交结果:

上一篇下一篇

猜你喜欢

热点阅读