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

Beautiful Arrangement II Problem

LeetCode 667. Given two integers n and k, construct a...

Range Addition II Problem

LeetCode 598. You are given an m x n matrix...

Perfect Number Problem

LeetCode 507. A perfect number is a positive integer that...

Optimal Division Problem

LeetCode 553. You are given an integer array nums. The...

Minimum Time Difference Problem

LeetCode 539. Given a list of 24-hour clock time points...

Minimum Moves To Equal Array Elements Problem

LeetCode 453. Given an integer array nums of size n,...