386. Lexicographical Numbers
Description
Given an integer n
, return all the numbers in the range [1, n]
sorted in lexicographical order.
You must write an algorithm that runs in O(n)
time and uses O(1)
extra space.
Example 1:
Input: n = 13 Output: [1,10,11,12,13,2,3,4,5,6,7,8,9]
Example 2:
Input: n = 2 Output: [1,2]
Constraints:
1 <= n <= 5 * 104
Solutions
Solution 1: Iteration
We first define a variable \(v\), initially \(v = 1\). Then we start iterating from \(1\), adding \(v\) to the answer array each time. Then, if \(v \times 10 \leq n\), we update \(v\) to \(v \times 10\); otherwise, if \(v \bmod 10 = 9\) or \(v + 1 > n\), we loop to divide \(v\) by \(10\). After the loop ends, we increment \(v\). Continue iterating until we have added \(n\) numbers to the answer array.
The time complexity is \(O(n)\), where \(n\) is the given integer \(n\). Ignoring the space consumption of the answer array, the space complexity is \(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 |
|