K-Th Smallest In Lexicographical Order Problem


Description

LeetCode Problem 440.

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

Example 1:

1
2
3
Input: n = 13, k = 2
Output: 10
Explanation: The lexicographical order is [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9], so the second smallest number is 10.

Example 2:

1
2
Input: n = 1, k = 1
Output: 1

Constraints:

  • 1 <= k <= n <= 10^9


Sample C++ Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution {
public:
    long long get_count(long long prefix, long long n){
        long long upper = prefix + 1, cnt = 0;
        while (prefix <= n) {
            cnt += min(n + 1, upper) - prefix;
            prefix *= 10;
            upper *= 10;
        }
        return cnt;
    }

    int findKthNumber(int n, int k) {
        int prefix = 1, cnt = 1;
        while (cnt < k) {
            int tmpcnt = get_count(prefix, n);
            if (tmpcnt + cnt <= k) {
                prefix ++;
                cnt += tmpcnt;
            } else {
                prefix *= 10;
                cnt ++;
            }
        }
        return prefix;
    }
};




Related Posts

Three Equal Parts Problem

LeetCode 927. You are given an array arr which consists...

Surface Area Of 3D Shapes Problem

LeetCode 892. You are given an n x n grid...

Super Palindromes Problem

LeetCode 906. Let’s say a positive integer is a super-palindrome...

Smallest Range I Problem

LeetCode 908. You are given an integer array nums and...

Projection Area Of 3D Shapes Problem

LeetCode 883. You are given an n x n grid...

Prime Palindrome Problem

LeetCode 866. Given an integer n, return the smallest prime...