public class Solution { public IList LexicalOrder(int n) { var numbers = new List(); var current = 1; for (int i = 0; i < n; ++i) { numbers.Add(current); if (current * 10 <= n) { current *= 10; continue; } // backtrack and try next while (current >= n || current % 10 == 9) { current /= 10; } ++current; } return numbers; } }