386. Lexicographical Numbers

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 inO(n)time and uses O(1) extra space.

Example 1:

1
2
Input: n = 13
Output: [1,10,11,12,13,2,3,4,5,6,7,8,9]

Example 2:

1
2
Input: n = 2
Output: [1,2]

Constraints:

  • 1 <= n <= 5 * 10^4

Hints/Notes

Solution

Language: C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public:
vector<int> res;
int n;

vector<int> lexicalOrder(int n) {
this->n = n;
for (int i = 1; i <= min(n, 9); i++) {
dfs(i);
}
return res;
}

void dfs(int val) {
res.push_back(val);
for (int i = 0; i < 10; i++) {
if (val * 10 + i > n) {
break;
}
dfs(val * 10 + i);
}
}
};