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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值