440. 字典序的第K小數字
在0~9的字典樹(十叉樹)上,首先計算以 cur 為字首的小於等於n的節點個數有多少,即透過以 cur 為根找子樹中小於等於 n 的節點個數
如果子樹個數小於k,那麼就在同一層向右平移1,
否則就跳到cur的一下層第一個子節點
點選檢視程式碼
class Solution {
public int findKthNumber(int n, int k) {
int cur = 1;
-- k;
while(k > 0) {
int num = find(cur, n);
if(num <= k) {
k -= num;
++ cur;
} else {
cur *= 10;
-- k;
}
}
return cur;
}
public int find(int cur, int n) {
int num = 0;
long l = cur;
long r = cur;
while(l <= n) {
num += Math.min(r, n) - l + 1;
l = l * 10;
r = r * 10 + 9;
}
return num;
}
}