【牛客剑指offer刷题】:Python:32.把数组排成最小的数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37251044/article/details/89283919

把数组排成最小的数

时间限制:1秒 空间限制:32768K 热度指数:222806
本题知识点: 数组
算法知识视频讲解

题目描述

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

解析

将a和b转为string后
若 a+b<b+a 则 a排在在前
如 2 21 :
因为 “21 2” < “2 21” 所以排序后为 “21 2”

代码

# -*- coding:utf-8 -*-
class Solution:
    def PrintMinNumber(self, numbers):
        # write code here
        if not numbers:
            return ""
        lmb = lambda n1, n2:int(str(n1) + str(n2)) - int(str(n2) + str(n1))
        array = sorted(numbers, cmp = lmb)
        return "".join([str(i) for i in array])

1.Python的map函数

python中的map()函数应用于每一个可迭代的项,返回的是一个结果list。map()接受两个参数,一个是函数,一个是序列。

实例:map(function,iterable,…)

list(map(str,[1,2,3,4,5,6,7,8])) # 把数字转换为字符串
>>> [1,2,3,4,5,6,7,8]

list(map(lambda x:x**2,[1,2,3,4,5]))#使用lambda匿名函数
>>> [1,4,9,16,25]

2.Python的sorted函数

如果我想降序排序呢,这时就要自定义cmp方法(当然更方便的是numbers.sort(reverse=True))

numbers=[5,2,9,7]
numbers.sort(lambda a,b:b-a)
numbers
[9,7,5,2]

如果数组成员不是数字,而是其它的类型例如dict,想根据某个属性来排序

persons=[{'name':'zhang3','age':15},{'name':'li4','age':12}]
persons
[{'name':'zhang3','age':15},{'name':'li4','age':12}]
persons.sort(lambda a,b:a['age']-b['age'])
persons
[{'age': 12, 'name': 'li4'}, {'age': 15, 'name': 'zhang3'}]

猜你喜欢

转载自blog.csdn.net/weixin_37251044/article/details/89283919