題目鏈接:
https://leetcode-cn.com/problems/k-th-smallest-in-lexicographical-order/
題目大意:
給定整數 n
和 k
,找到 1
到 n
中字典序第 k
小的數字。
注意:1 ≤ k ≤ n ≤ 109。
具體思路:
首先遍歷的思路和這個題是類似的,https://www.cnblogs.com/letlifestop/p/11197694.html 。然后對於這個題,肯定不能一步一步的找到這個數。因為是字典序,我們可以把這些數構造成一個樹,一個十叉樹。然后順序遍歷找到第k個就好了。
AC代碼:
1 class Solution { 2 public: 3 long long findKthNumber(long long n, long long k) { 4 long long cur = 1; 5 k--; 6 while(k>0){ 7 long long step = 0; 8 long long tmp = cur , nex = tmp + 1 ; 9 while(tmp <= n){ // 先找到這個數是在以哪個節點為根節點的樹上。 10 step += min(nex,n+1) - tmp; 11 nex *= 10; 12 tmp *= 10; 13 } 14 if(step <= k){k -= step;cur++;} //這個時候橫向增加 15 else {cur *= 10;k--;} // 這個時候需要往下走一個節點。 16 } 17 return cur; 18 } 19 };