Problem Link

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

Solution


Python3

class Solution:
    def lexicalOrder(self, n: int) -> List[int]:
        res = []
 
        def go(curr):
            if curr > n: return
            
            res.append(curr)
 
            for k in range(10):
                go(curr * 10 + k)
        
        for k in range(1, 10):
            go(k)
        
        return res