0386. Lexicographical Numbers
https://leetcode.com/problems/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
ac
It's more like a tricky math problem instead of practical algorithm problem.
https://leetcode.com/problems/lexicographical-numbers/discuss/86231/Simple-Java-DFS-Solution
class Solution {
public List<Integer> lexicalOrder(int n) {
List<Integer> res = new ArrayList<>();
for (int i = 1; i <=9; i++) dfs(n, i, res);
return res;
}
public boolean dfs(int n, int k, List<Integer> res) {
// exit
if (k > n) return false;
if (k != 0) res.add(k);
for (int i = 0; i <= 9; i++) {
if (!dfs(n, k * 10 + i, res)) break;
}
return true;
}
}
/*
10-nodes tree, pre-order traversal, same as #440
*/
Last updated
Was this helpful?