LeetCode440 字典序的第K小數字

2021-09-27 09:01:43 字數 760 閱讀 9043

有一說一,這題用樹的方式很容易理解,想象有如下一棵樹

我們要求第k小的樹,也就是求這樣乙個節點:以從上到下從左到右遍歷這棵樹它是第k個。因為如上所示的這棵樹它從上到下從左到右遍歷也就是字典序。所以我們可以按如下的步驟進行

從最頂上的節點出發,從左往右計算以每個子節點為字首的數字個數num

numnu

m如果num

numnu

m比k大,那麼說明深度太淺了,我們將num

numnu

m*10,也就是將其向下移動一層,深度++

如果n um

numnu

m比k小,說明子樹所處的位置太左了,我們將num

numnu

m+1,也就是將子樹往右移乙個

//用來求以pre為字首的數字個數,next為下一字首,要注意這裡next要為long long,不然一直*10會溢位int上界

intgetpre

(int pre,

int n)

return count;

}class

solution

else

}return pre;}}

;

leetcode 440 字典序的第K小數字

給定整數 n 和 k,找到 1 到 n 中字典序第 k 小的數字。注意 1 k n 109。示例 輸入 n 13 k 2 輸出 10 解釋 字典序的排列是 1,10,11,12,13,2,3,4,5,6,7,8,9 所以第二小的數字是 10。看了題解做出來的。感覺沒有想得很明白。按照字典序排序,以數...

leetcode 440 字典序的第K小數字

目錄 一 題目內容 二 解題思路 三 給定整數 n 和 k,找到 1 到 n 中字典序第 k 小的數字。注意 1 k n 109。示例 輸入 n 13 k 2 輸出 10 解釋 字典序的排列是 1,10,11,12,13,2,3,4,5,6,7,8,9 所以第二小的數字是 10。十叉樹,那麼,滿十叉...

440 字典序的第K小數字

題目鏈結 解題思路 一次計算以1,2,3,4,5,6,7,8,9,10,11,12.為字首的,不超過上界n的數字個數,對數字總數進行累加,累加的和為k時,將此時字首的下乙個數字prefix 1返回,即為字典序的第k小數字。c include using namespace std prefix是字首...