leetcode 386. 字典序排数

本文探讨了如何生成从1到n的字典顺序数字序列,提供了两种解决方案:一种是直接使用排序方法,另一种是采用深度优先搜索(DFS)的递归算法。通过这两种方法,可以有效地解决LeetCode上的一道经典题目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 题目链接 https://leetcode-cn.com/problems/lexicographical-numbers/submissions/

  2. 题目描述

    1. 给定一个整数 n, 返回从 到 的字典顺序。
    2. 给定 n =1 3,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9] 。
  3. 解题思路

    1. 排序: 将数组元素转换成字符串然后排序
    2. DFS:递归公式为 f(n) = \sum_{i=0}^{n}(i + f(i))
  4. 代码

    1. python(排序)
      class Solution:
          def lexicalOrder(self, n: int) -> List[int]:            
              return sorted([i for i in range(1, n+1)], key=str)

       

    2. python(回溯)
      class Solution:
          def lexicalOrder(self, n: int) -> List[int]:
              ans = []
              def _dfs(a):
                  nonlocal ans
                  if a > n:return 
                  ans.append(a)
                  for i in range(0, 10):
                      _dfs(a * 10 + i)
              for i in range(1, 10):
                  _dfs(i)
              return ans
                  
            

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值