Recursion
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| class Solution { public List<Integer> lexicalOrder(int n) { List<Integer> list = new ArrayList<>(n);
for (int i = 1; i <= 9; i++) { dfs(n, i, list); }
return list; }
private void dfs(int n, int i, List<Integer> list) { if (i > n) { return; }
list.add(i); for (int j = 0; j <= 9; j++) { dfs(n, i * 10 + j, list); } } }
|
Iterate
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 List<Integer> lexicalOrder(int n) { List<Integer> list = new ArrayList<>(n);
int x = 1; while (list.size() < n) { while (x <= n) { list.add(x); x *= 10; }
while (x > n || x % 10 == 9) { x /= 10; }
x++; }
return list; } }
|
References
386. Lexicographical Numbers