golang力扣leetcode 386.字典序排数

简介: golang力扣leetcode 386.字典序排数

386.字典序排数

386.字典序排数

题解

字典序,简单题,直接看注释即可

代码

/*
  字典序 n=13
  1 10 11 12 13 2 3 4 5 6 7 8 9
*/
//迭代
func lexicalOrder1(n int) []int {
  ans := make([]int, n)
  num := 1
  for i := range ans {
    ans[i] = num
    if num*10 <= n { //如果num*10 <= n,说明num*10是下一个字典序
      num *= 10
    } else { //如果num*10 > n,说明num*10不满足字典序,尝试num++,或者缩小
      for num+1 > n { //如果num+1>n,说明要缩小,返回上一位
        num /= 10
      }
      for num%10 == 9 { //如果num是 9 结尾,说明搜索到末尾,返回上一位
        num /= 10
      }
      num++ //两种情况缩小后,加一
    }
  }
  return ans
}
//递归
func lexicalOrder2(n int) []int {
  //因为dfs是闭包捕获了ans切片,所以不用传指针,闭包内外用的是同一个ans
  ans := make([]int, 0, n)
  var dfs func(int, int)
  dfs = func(cur int, limit int) {
    //如果超过限制则返回
    if cur > limit {
      return
    } else {
      //在范围内则添加,因为是dfs,那么是天然满足字典序的
      ans = append(ans, cur)
      //递归放大十倍的下一个字典序
      for i := 0; i <= 9; i++ {
        dfs(cur*10+i, limit)
      }
    }
  }
  //入口
  for i := 1; i <= 9; i++ {
    dfs(i, n)
  }
  return ans
}
目录
相关文章
|
3月前
|
存储
力扣-2904最短且字典序最小的美丽子序列
力扣-2904最短且字典序最小的美丽子序列
29 1
|
2月前
2670.找出不同元素数目差数组-力扣(LeetCode)
2670.找出不同元素数目差数组-力扣(LeetCode)
21 0
|
2月前
|
索引
821.字符的最短距离-力扣(LeetCode)
821.字符的最短距离-力扣(LeetCode)
23 0
|
3月前
|
算法 数据可视化 数据挖掘
最佳加油站选择算法:解决环路加油问题的两种高效方法|LeetCode力扣134
最佳加油站选择算法:解决环路加油问题的两种高效方法|LeetCode力扣134
|
3月前
|
存储 算法 数据可视化
LeetCode 力扣题目:买卖股票的最佳时机 IV
LeetCode 力扣题目:买卖股票的最佳时机 IV
|
3月前
|
存储 算法 数据可视化
LeetCode 力扣题目:买卖股票的最佳时机 III
LeetCode 力扣题目:买卖股票的最佳时机 III
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
42 6
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
37 4
|
1月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
79 2
|
1月前
|
索引 Python
【Leetcode刷题Python】从列表list中创建一颗二叉树
本文介绍了如何使用Python递归函数从列表中创建二叉树,其中每个节点的左右子节点索引分别是当前节点索引的2倍加1和2倍加2。
37 7