【剑指Offer】把数组排成最小的数 解题报告(Python)
标签(空格分隔): 剑指Offer
题目地址:https://www.nowcoder.com/ta/coding-interviews
题目描述:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
解题方法
见过的题,再做就知道怎么做了,这个题的做法很巧妙,把要比较的两个数字进行不同顺序的前后拼接,进行大小比较。剑指Offer上有个证明,证明了按拼接次序进行排序得到的数字串变成str后数字是最小的。
代码:
# -*- coding:utf-8 -*-
# -*- coding:utf-8 -*-
class Solution:
def PrintMinNumber(self, numbers):
return "".join(map(str,sorted(numbers, cmp = lambda a, b : cmp(str(a) + str(b), str(b) + str(a)))))
Date
2018 年 3 月 21 日 – 睡了个懒觉,感觉好幸福。。