Given an integer n, return 1 - n in lexicographical order.
For example, given 13, return: [1,10,11,12,13,2,3,4,5,6,7,8,9].
Please optimize your algorithm to use less time and space. The input size may be as large as 5,000,000.
Analysis:
The numbers are arranged in tree structure:
1
10 11 12 ... 19
100 101 ..... 109 | 110 111 .... 119 | .....
We just use DFS to go through the tree.
Solution:
1 public class Solution { 2 public List<Integer> lexicalOrder(int n) { 3 List<Integer> resList = new ArrayList<Integer>(); 4 for (int i = 1; i < 10; i++) { 5 lexicalOrderRecur(i, n, resList); 6 } 7 return resList; 8 } 9 10 public void lexicalOrderRecur(int cur, int n, List<Integer> resList) { 11 if (cur > n) { 12 return; 13 } 14 resList.add(cur); 15 16 for (int i = 0; i < 10; i++) { 17 if (10 * cur + i > n) { 18 break; 19 } 20 lexicalOrderRecur(10 * cur + i, n, resList); 21 } 22 } 23 }