image.png

思路:DFS遍历字典树

  • 此题的关键在于,隐性维护了一个字典树,这一点是理解思路的关键。
  • 树的每一层都有LC386. 字典树排序 - 图3个孩子节点,分别是LC386. 字典树排序 - 图4LC386. 字典树排序 - 图5,每读到下一层,LC386. 字典树排序 - 图6,如果这个数值比LC386. 字典树排序 - 图7大,就不记录,否则就记录。

    image.png

    image.png

    代码:

  1. class Solution:
  2. # 维护了一个隐性的字典树,只要对其进行dfs即可
  3. def lexicalOrder(self, n: int) -> List[int]:
  4. recVal = list()
  5. def dfs(curVal: int, curDepth: int) -> None:
  6. if curVal > n or (curVal == 0 and curDepth != 0):
  7. return
  8. if curDepth > 0:
  9. recVal.append(curVal)
  10. for i in range(10):
  11. dfs(curVal * 10 + i, curDepth + 1)
  12. dfs(0, 0)
  13. return recVal