Back to all solutions

#440 - K-th Smallest in Lexicographical Order

Problem Description

Given two integers n and k, return the kth lexicographically smallest integer in the range [1, n].

Solution

/**
 * @param {number} n
 * @param {number} k
 * @return {number}
 */
var findKthNumber = function(n, k) {
  let result = 1;
  k--;

  while (k > 0) {
    let count = 0;
    for (let first = result, last = result + 1; first <= n; first *= 10, last *= 10) {
      count += Math.min(n + 1, last) - first;
    }

    if (count <= k) {
      result++;
      k -= count;
    } else {
      result *= 10;
      k--;
    }
  }

  return result;
};