LeetCode每日一题(3)——字典序排数

简介: LeetCode每日一题(3)字典序排数1.题目2.示例3.思路4.代码

1.题目


给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。


你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。


2.示例


示例 1:


输入:n = 13

输出:[1,10,11,12,13,2,3,4,5,6,7,8,9]


示例 2:


输入:n = 2

输出:[1,2]


3.思路


我是没啥思路的,看了一个别人的题解,特别好理解,真正着手去做又发现在进位或者临界时的思路又不清晰了。感觉只有按照字典应有的顺序依次生成n个数才能满足复杂度的要求。


4.代码


func lexicalOrder(n int) []int {
  var list = make([]int, n)
  last := 1
  for i := 0; i < n; i++{
    list[i] = last
    if last * 10 <= n{
      last = 10 * last
      continue
    }else{
      if last == n{
        last = last/10
      }
      for last % 10 == 9{
        last = last/10
      }
    }
    last++
  }
  return list
}
相关文章
|
6月前
leetcode-440:字典序的第K小数字
leetcode-440:字典序的第K小数字
40 0
|
5月前
|
机器学习/深度学习 存储 算法
Python5种算法回溯+剪枝、字典序、递归交换、计数回溯、迭代法 实现全排列ll【力扣题47】
Python5种算法回溯+剪枝、字典序、递归交换、计数回溯、迭代法 实现全排列ll【力扣题47】
|
5月前
|
存储
力扣-2904最短且字典序最小的美丽子序列
力扣-2904最短且字典序最小的美丽子序列
33 1
|
5月前
|
存储 机器学习/深度学习 算法
python 3种算法 回溯法、字典序生成、递归交换 实现全排列【力扣46题】
python 3种算法 回溯法、字典序生成、递归交换 实现全排列【力扣46题】
|
6月前
|
Java
2697. 字典序最小回文串 --力扣 --JAVA
给你一个由 小写英文字母 组成的字符串 s ,你可以对其执行一些操作。在一步操作中,你可以用其他小写英文字母 替换  s 中的一个字符。 请你执行 尽可能少的操作 ,使 s 变成一个 回文串 。如果执行 最少 操作次数的方案不止一种,则只需选取 字典序最小 的方案。 对于两个长度相同的字符串 a 和 b ,在 a 和 b 出现不同的第一个位置,如果该位置上 a 中对应字母比 b 中对应字母在字母表中出现顺序更早,则认为 a 的字典序比 b 的字典序要小。 返回最终的回文字符串。
47 0
2697. 字典序最小回文串 --力扣 --JAVA
|
6月前
|
Go
golang力扣leetcode 386.字典序排数
golang力扣leetcode 386.字典序排数
38 0
|
6月前
|
Go
golang力扣leetcode 440.字典序的第K小数字
golang力扣leetcode 440.字典序的第K小数字
37 0
|
算法 C++ Python
每日算法系列【LeetCode 386】字典序排数
每日算法系列【LeetCode 386】字典序排数
|
算法
LeetCode——386. 字典序排数
LeetCode——386. 字典序排数
80 0