一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第22天,点击查看活动详情
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
- 本题只有一个参数数组nums,元素都是非负数整数。
- nums数组长度1~100,num[i]范围在0~10^9
二、思路分析:
我们拿到本题,题目介绍很简单,要求对数组nums整数元素进行拼接组合成一个最大数。看完示列,发现又是一道🔥脑的题目(眼睛会,手不会)。
-
遇到困难的题目,我们也要硬着头皮思考,扰扰脑袋思考🤔,很容易想到列表元素两两比较方法:
- 因为nums数组中元素的都是整数,我们需要将元素转化成字符串str()
- 取出两个元素num1,num2,进行转化成str(num1),str(num2)
- 两个字符串交换位置,转化成整数比较大小,int(str(num1) + str(num2)) < int(str(num2)+str(num1))
- 将较大的与较小的交换位置num1,num2 = num2,num1
-
方法一:暴力求解
-
解决了元素之间比较的问题,现在就需要对nums列表元素进行比较排序:
- 最简单的方法就是:使用嵌套for循环
- 第一层for循环:索引i取值范围0~len(nums)-1
- 第二层for循环:索引j取值范围i+1~len(nums)
- 对nums[i],nums[j]两个元素进行交换比较
- 直到遍历完nums元素,然后将元素进行转换成str类型,并拼接字符串res
这里,需要对最高为0进行处理,所以返回是需要对res类型转化整数字符串转化
str(int(res))根据以上思路,我们使用python不难实现,代码如下:
class Solution(object): def largestNumber(self, nums): """ :type nums: List[int] :rtype: str """ ans = "" for i in range(len(nums)-1): for j in range(i+1,len(nums)): if int(str(nums[i]) + str(nums[j])) < int(str(nums[j])+str(nums[i])): nums[i],nums[j] = nums[j],nums[i] for num in nums: ans = ans + str(num) return str(int(ans)) -
方法二:sort()排序
- nums列表中元素拼接可以使用sort()排序的cmp字段
- 排序的规则通过lambda. lambda x, y: 1 if x + y < y + x else -1
nums_str = map(str,nums) compare = lambda x, y: 1 if x + y < y + x else -1 nums_str.sort(cmp=compare) res = "".join(nums_str) if res[0] == "0": res = "0" return res
三、总结:
本题主要考察对数组元素进行排序处理,最简单的方式使用嵌套for循环遍历。借用sort()函数,执行效率快很多,AC记录如下:
时间复杂度O(N*logN),空间复杂度O(N)
以上是本期内容,欢迎大佬们点赞评论,下期见~~~