今天刷到leetcode 440,發現有關字典序的乙個方法:樹。
問題如下:
給定整數 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。
解答:在這裡的字典序排列相當如十叉樹的前序遍歷。
1 2 .....
10 11 12... 20...
所以,從第乙個樹開始遍歷,統計當前節點下面的子節點個數,如果大於k,則第k個肯定在這棵子樹下面。那麼移動當前節點到子節點(前序遍歷)
如果子節點數小於k,證明在下乙個子樹下面。下乙個子樹就是cur+1。
移動到下乙個節點時候,k要相應調整,應為已經遍歷了相應的字典序。
class solution
if(kids <= k) else
}return cur;
}};
關於字典序法實現全排列
輸出若干字元或數碼的全排列,是計算機程式語言應用中的乙個非常經典的問題。全排列問題既有遞迴的解法,也有非遞迴的解法。本文主要對全排列的非遞迴解法 也就是字典序法作一些簡單的說明。字典序法的基本原理是對於特定的一些字元或者數碼,不同的排列之間可以模擬數字進行大小的比較。例如,考慮字母 a 到 d 生成...
關於字典序的若干問題
1.六個數里取所有三個數的全排列按字典序輸出 法一 我記得比賽時我用的是二維陣列,每一維先排序,竟然立馬水過了,後來我想要是數多了就很麻煩,於是有了下面的方法。法二 1 include 2 include 3 include 4 using namespace std 56 const int ma...
字典序演算法
字典序排列就是按照字典a z,1 9的順序給出字串的順序全排列,例如abc的全排列就是從abc一直排到cba。那麼給定乙個字串,怎麼找出恰好大於該字串的下乙個排列呢?我們考慮如下的步驟 1 假設字串為p1 p2 pn 我們從後往前尋找第乙個符合pj j 1條件的字元pj 也就是說,p1 p2 pj ...