字典序的第K小數字(十叉樹的先序遍歷)


 題目鏈接:

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 };

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM