[LeetCode每日一题]179.最大数
179.最大数
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
示例 1:
输入:nums = [10,2]
输出:"210"
示例 2:
输入:nums = [3,30,34,5,9]
输出:"9534330"
示例 3:
输入:nums = [1]
输出:"1"
示例 4:
输入:nums = [10]
输出:"10"
1.解题思路
类比排序算法,首先将这组数变成一组字符串,然后字符串排序,即str_nums = list(map(str, nums))。
假设x, y是str_nums中的两个字符串,那么关键就是要判断x和y的相对位置,举个栗子,假设x = '30', y = '34',则x+y='3034',y+x='3430',显然3430>3034,因此y的位置就在x的前边。
利用python中类list的内置函数sort或sorted(sorted会返回新的对象,而sort会改变输入本身)就可以对str_nums进行排序。
代码如下。
import functools class Solution: def largestNumber(self, nums: List[int]) -> str: str_nums = list(map(str, nums)) str_nums.sort(key=functools.cmp_to_key(lambda x, y:-1 if x+y>y+x else 1)) if str_nums[0] == '0':return '0' return ''.join(str_nums)
2.相关函数解释
map(func, iterable, ...) 在python3.x中会返回一个迭代器,而在python2.x中会返回一个list。
functools.cmp_to_key(func) 将老式的比较函数(comparison function)转化为关键字函数(key function)。与接受key function的工具一同使用(如 sorted(), min(), max(), heapq.nlargest(), itertools.groupby())。该函数主要用来将程序转成 Python 3 格式的,因为 Python 3 中不支持比较函数。比较函数是可调用的,接受两个参数,比较这两个参数并根据他们的大小关系返回负值、零或正值中的某一个。关键字函数也是可调用的,接受一个参数,同时返回一个可以用作排序关键字的值。
str.join(iterable) 举个栗子吧。
str='-' l=['2016','5','9'] str.join(l) >>>'2016-5-9'
浙公网安备 33010602011771号