動機
從最左一路加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