先了解什么是字典顺序 比如201
[1,10,100,101,102,103,104,105,106,107,108,109,11,110,…198,199,2,20,200,201,21,…]
可以用sorted函数 但是时间复杂度会增加
观察整理规律可得
cur为当前数字
1.若cur10<=n 则下个数为cur10 否则
2.如果cur数字末尾不为9并且cur+1不大于n 则cur+=1 否则
3.观察不是2的情况 (i)如果cur=n 可以看到201 下一个数为21 cur=cur//10+1
(ii)如果cur数字末尾为9 109->11 199->2 也就是去cur的末尾数字直到不为9 再 cur=cur//10+1
class Solution:
def lexicalOrder(self, n):
"""
:type n: int
:rtype: List[int]
"""
if n<1:
return []
cur=1
res=[]
for i in range(n):
res.append(cur)
if cur*10<=n:
cur=cur*10
elif cur%10!=9 and cur+1<=n:
cur+=1
else:
while ((cur//10) % 10)==9:
cur=cur//10
cur=cur//10+1
return res