Leetcode 386. 字典序排数 / python实现

题目

在这里插入图片描述

解题思路

  1. DFS
    1-9的数字可以构建九颗树,字典序相当于顺序的对每一颗树进行前序遍历。
    每个节点下一层的元素就是当前数值后面加上[0, 9]的数值,eg:1的下一层就是 10、11、12…19
    在这里插入图片描述
  2. 自带排序库

代码实现

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))

猜你喜欢

转载自blog.csdn.net/qq_42711381/article/details/107149230