關於字典序

2021-09-26 09:52:00 字數 620 閱讀 5386

今天刷到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 ...