動機

從最左一路加digit上去

Problem

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 = 13Output: [1,10,11,12,13,2,3,4,5,6,7,8,9]

Example 2:

Input: n = 2Output: [1,2]

 

Constraints:

  • 1 <= n <= 5 * 104

Sol

class Solution:
    def lexicalOrder(self, n: int,acc=0) -> List[int]:
        ret = []
        for x in range(acc,acc+10):
            if x == 0:
                continue
            if x <= n:
                ret += [x]+self.lexicalOrder(n,x*10)
            else:
                break
        return ret