386. 字典序排数
题目描述
给你一个整数 n
,按字典序返回范围 [1, n]
内所有整数。
你必须设计一个时间复杂度为 O(n)
且使用 O(1)
额外空间的算法。
示例 1:
输入:n = 13 输出:[1,10,11,12,13,2,3,4,5,6,7,8,9]
示例 2:
输入:n = 2 输出:[1,2]
提示:
1 <= n <= 5 * 104
解法
方法一:迭代
我们首先定义一个变量 \(v\),初始时 \(v = 1\)。然后我们从 \(1\) 开始迭代,每次迭代都将 \(v\) 添加到答案数组中。然后,如果 \(v \times 10 \leq n\),我们将 \(v\) 更新为 \(v \times 10\);否则,如果 \(v \bmod 10 = 9\) 或者 \(v + 1 > n\),我们就循环将 \(v\) 除以 \(10\)。循环结束后,我们将 \(v\) 加一。继续迭代,直到我们添加了 \(n\) 个数到答案数组中。
时间复杂度 \(O(n)\),其中 \(n\) 是给定的整数 \(n\)。忽略答案数组的空间消耗,空间复杂度 \(O(1)\)。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|