题目
解题思路
- DFS
1-9的数字可以构建九颗树,字典序相当于顺序的对每一颗树进行前序遍历。
每个节点下一层的元素就是当前数值后面加上[0, 9]的数值,eg:1的下一层就是 10、11、12…19
- 自带排序库
代码实现
DFS
class Solution:
def lexicalOrder(self, n: int):
self.res = []
def DFS(i):
i = int(i)
if i > n:
return
self.res.append(i)
for j in range(10):
# 构建下一层节点
DFS(str(i)+str(j))
# 构建1~9的树
for i in range(1, 10):
DFS(i)
return self.res
排序库
from functools import cmp_to_key
class Solution:
def lexicalOrder(self, n: int):
# 每一位进行比较,10和10x这种情况,谁长谁大
def check(a, b):
a, b = str(a), str(b)
la = lb = 0
while la < len(a) and lb < len(b):
if a[la] > b[lb]:
return 1
if a[la] < b[lb]:
return -1
la += 1
lb += 1
if lb != len(b):
return -1
return 1
tmp = [i for i in range(1, n+1)]
return sorted(tmp, key=cmp_to_key(check))