0179-Largest Number( 最大数)

末蓝、 2022-09-01 13:51 131阅读 0赞

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

题目

在这里插入图片描述

题解

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

代码

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

  1. class Solution:
  2. def largestNumber(self, nums: List[int]) -> str:
  3. 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(N∗log(N)),空间复杂度为 O ( N ) O(N) O(N)),大家也应当考虑高效的方法,部分题目的高效解法可以参考我的仓库源码。

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,131人围观)

还没有评论,来说两句吧...

相关阅读

    相关 0179-Largest Number( )

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