LeetCode 0386. Lexicographical Numbers Solution in Java, C++, Python & More | Explanation + Code

CoderIndeed
0
0386. Lexicographical Numbers

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

Solutions

Solution 1: Iteration

We first define a variable v, initially v = 1. Then we start iterating from 1, adding v to the answer array each time. Then, if v × 10 ≤ n, we update v to v × 10; otherwise, if v \bmod 10 = 9 or v + 1 > n, we loop to divide v by 10. After the loop ends, we increment v. Continue iterating until we have added n numbers to the answer array.

The time complexity is O(n), where n is the given integer n. Ignoring the space consumption of the answer array, the space complexity is O(1).

PythonJavaC++GoTypeScriptRustJavaScript
class Solution: def lexicalOrder(self, n: int) -> List[int]: ans = [] v = 1 for _ in range(n): ans.append(v) if v * 10 <= n: v *= 10 else: while v % 10 == 9 or v + 1 > n: v //= 10 v += 1 return ans(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !