版权声明:本文为博主原创文章,未经博主允许不得转载。 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'}]