440. 字典序的第K小数字

440. 字典序的第K小数字


题目链接:440. 字典序的第K小数字

代码如下:

class Solution {
public:
    int findKthNumber(int n, int k) {
        int curr = 1;
        k--;
        while (k > 0) {
            int steps = getSteps(curr, n);
            if (steps <= k) {
                k -= steps;
                curr++;
            } else {
                curr *= 10;
                k--;
            }
        }
        return curr;
    }

private:
    int getSteps(int curr, long n) {
        int steps = 0;
        long first = curr;
        long last = curr;
        while (first <= n) {
            steps += min(last, n) - first + 1; // 计算当前前缀的范围内的数字个数
            first *= 10;
            last = last * 10 + 9; // 扩展前缀到下一个范围
        }
        return steps;
    }
};

你可能感兴趣的:(c++)