字典序(自己實現next permutation)

2021-09-10 23:39:02 字數 570 閱讀 8991

問題:輸入n,從小到大輸出從1到n,n個數的字典序

步驟:1.初始化,將1~n從小到大存入buf陣列

2.n個數的全排列有n!個,則呼叫n!次,並輸出字典序。

3.my_next_permutation實現:

從後往前遍歷buf陣列,每次比較buf[i],buf[i+1],找到第乙個正序序列,記下此時的下標a=i;

從a開始往後遍歷,找到後n-a-1個數中大於buf[a]且最小的數,記下其下標b

調換buf[a],buf[b]

陣列元素從a+1到n逆序

下面是**實現:

#include #include using namespace std;

int factorial(int n)

return result;

}void my_next_permutation(int *buf,int n)

for(int i=0; icout

} return 0;

}

字典序演算法

字典序排列就是按照字典a z,1 9的順序給出字串的順序全排列,例如abc的全排列就是從abc一直排到cba。那麼給定乙個字串,怎麼找出恰好大於該字串的下乙個排列呢?我們考慮如下的步驟 1 假設字串為p1 p2 pn 我們從後往前尋找第乙個符合pj j 1條件的字元pj 也就是說,p1 p2 pj ...

字典序問題

碰到過很多求關於字典序的問題,一直都是用的c 的stl庫中的函式水過的,今天終於有機會,算是對字串字典序問題的乙個總結吧。如果已知乙個字串 abc 為了更直觀,我們把建立如下對映 a 1 b 2 c 3 我們把這三個字母的所有排列都寫出來,有 序號字串 對映數字 1abc 1232 acb132 3...

字典序問題

字典序問題,給定乙個長度不超過6的小寫字母公升序字串 字串中的字元相對順序和字母表中的順序一致 迅速計算出在字典中的編碼,字典如 1 2 3 26 27 28 a b c z ab ac 總體思路為先計算出給定字串前所有的個數,然後再加一 include include 計算從i開始的長度為k的所有...