Leetcode 440. 字典序的第K小数字
思路:
Code:
class Solution { public: int findKthNumber(int n, int k) { // 逐层统计node子树大小 auto count_subtree_size = [&](int node) -> int { int size = 0; // 子树大小不超过n怕,故用int long long left = node, right = node + 1; // l和r会超过int while (left <= n) { // 本层最小值为left, 最大是min(right, n + 1) - 1 size += min(right, n + 1LL) - left; left *= 10, right *= 10; }return size; }; int node = 1; k --; // 访问节点 node while (k > 0) { int size = count_subtree_size(node); if (size <= k) // 向右,跳过node子树->注意是size <= k node ++, k -= size; else node *= 10, k --; // 向下深入结点 } return node; } };