Skip to content

386. 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: Depth-First Search

  • Time complexity: O(n)
  • Space complexity: O(n)

 

JavaScript

js
/**
 * @param {number} n
 * @return {number[]}
 */
const lexicalOrder = function (n) {
  const result = [];

  const generateNum = num => {
    if (num > n) return;

    for (let index = 0; index <= 9; index++) {
      const current = num + index;

      if (current > n) return;
      if (index === 9 && !(current % 10)) return;
      result.push(current);
      generateNum(current * 10);
    }
  };

  generateNum(1);

  return result;
};

Released under the MIT license