0179-Largest Number

Posted 周先森爱吃素

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0179-Largest Number相关的知识,希望对你有一定的参考价值。

这个系列算是出于个人兴趣开的一个新坑吧,最近看到同学刷LeetCode算法题,就想写写那些可以一行Python代码写出来的题目,因此本专栏的文章的解题方式效率不做保证,只为追求“一行的浪漫”。

题目

题解

简单解释一下题目,给定一个非负数组nums,将这些数字拼接到一起形成一个大数,由于该数很大,需要以字符串的形式输出。本题难度为Medium。

代码

这道题的题解思路在于,你不可能遍历所有的组合情况然后选出最大的那种,这样一定会TLE的。可以考虑从字符串的角度来理解,就是两个数字字符ab是拼接成a+b还是b+a更大在Python中可以依靠等长字符串直接比大小得出结果(因此,如果输入xy,且x+y < y+x那么此时x应该在后面,因此为了契合默认的升序排序,这里输出一个负数即可)。那么只要对整个字符串列表按照这个规则进行降序排序(内部其实是逐个比较的过程),那么排序的结果其实就是最大数构成的顺序,将他们顺次拼接到一起即可。这里需要注意的是,因为输入非负,所以可能是全0,这时候输出会是000这种格式,这里因为一行不便判断,所以用int函数检查后再转为str输出。

class Solution:
    def largestNumber(self, nums: List[int]) -> str:
        return str(int("".join(sorted(map(str, nums), key = functools.cmp_to_key(lambda x,y: 1 if x+y < y+x else -1)))))

从下面的提交反馈来看,效率不是很高(时间复杂度为 O ( N ∗ l o g ( N ) ) O(N* log(N)) O(Nlog(N)),空间复杂度为 O ( N ) O(N) O(N)),大家也应当考虑高效的方法,部分题目的高效解法可以参考我的仓库源码

以上是关于0179-Largest Number的主要内容,如果未能解决你的问题,请参考以下文章

代码片段:Shell脚本实现重复执行和多进程

[Grid Layout] Use auto-fill and auto-fit if the number of repeated grid tracks is not to be def(代码片段

js简洁代码片段

C 中的共享内存代码片段

android小知识点代码片段

Javascript JSON 的问题