一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第20天,点击查看活动详情
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
- 本题只有一个参数十进制n,范围在1~5 * 10^4
- 需要实现时间复杂度O(n),空间复杂度O(1)
二、思路分析:
我们拿到本题,一看题目寥寥几个字就介绍完,还没有明白字典序是什么?
打开网上的浏览器,去了解一番字典序:
- 排序按照字典顺序来进行排序的,第一个字母排完,再第二个字母排,以此类推
选取本题的示例n=32时,先排第一位数字的结果,再排个位的。
本题给出的是一个十进制的数字,要求数字进行字典排序,时间复杂为O(N)
-
方法一: 迭代法
大家有没有记得之前我们做的进制的问题考察都是逆向思维,取每低位的数字。
本题,我们要换一种思路,通过迭代方式取高位的数字。
- 首先定义一个长度为 n 的初始化列表,用于存储排序结果
- 题目要求从1到n进行排序,所以cur初始值设置为1
- 使用for循环遍历数值n范围内值
- 对cur10进行判断小于n时,则cur被赋值为cur10,进入整数序列排序
- 当cur*10大于n,则需要判断cur mod 10 是为9,或者cur + 1 大于 n,则说明需要进入下一个整数序列,cur = cur / 10,然后进行cur = cur +1
- 否则cur 进行加1
以上方法,需要对下一个整数序列进行处理,使用python实现代码如下:
class Solution(object):
def lexicalOrder(self, n):
"""
:type n: int
:rtype: List[int]
"""
ans = []
cur = 1
for i in range(n):
ans.append(cur)
if cur *10 <=n:
cur = cur *10
else:
while cur % 10 == 9 or cur +1 >n:
cur = cur / 10
cur = cur +1
return ans
-
方法二:sort排序
-
在python中只需要sorted()与list()结合
-
python魔力之处,可以一行代码解决
return sorted(list(range(1,n+1)),key=str)
三、总结:
本期我们了解了字典序排序,解答该题使用迭代方法,AC记录如下:
时间复杂度O(n),n是整数n范围 空间复杂度O(1)
以上是本期内容,欢迎大佬们点赞评论,下期见~~~