leetcode 386. Lexicographical Numbers

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.

  • my solution

    1
    return sorted([i for i in range(1,n+1)],key=str)
  • a clear solution:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    def order(n):
    out = []
    cur = 1
    for i in range(1,n+1):
    out.append(cur)
    if cur*10 <= n:
    cur *= 10
    elif cur%10 != 9 and cur + 1 <= n:
    cur += 1
    else:
    while (cur//10)%10 == 9:
    cur = cur//10
    cur = cur//10 + 1
    return out