字元全排列 遞迴

2021-10-03 02:15:59 字數 1343 閱讀 3123

字串全排列

給定一組互不相同的字元,求這組字元的全排列。

輸入:輸入乙個字串

abc輸出:

輸出該字元的全排列,排列的先後順序不影響結果。

abc acb bac bca cab cba

思路:只需考慮讓每乙個字元都做首字元的可能,然後其子串也是如此。

**

#include

#include

char str[

1000];

void

swap

(char

*a,char

*b)void

solve

(int from,

int to)

for(

int i=from;i<=to;i++)}

intmain()

如果改變一下題目,輸入乙個可重複的字串。

我們只需考慮,首字元下一次不能重複。加乙個判斷條件即可。

**

#include

#include

char str[

1000];

void

swap

(char

*a,char

*b)bool

judge

(int from,

int to)

//判斷有沒有重複數字打頭

}return

true;}

void

solve

(int from,

int to)

for(

int i=from;i<=to;i++)}

}int

main()

這個演算法的複雜度為(n+1)!的,本題可以用空間換時間,轉化為n!。

#include

#include

#include

using

namespace std;

const

int maxn=

1e5;

char str[maxn]

;void

solve

(int from,

int to)

//解決重複數字問題。用空間換時間

int mask[

256]=;

for(

int i=from;i<=to;i++

) mask[str[i]]=

0;for(

int i=from;i<=to;i++)}

intmain()

遞迴 字串全排列 全排列

在高中階段我們已經通過大量的習題了解了排列和組合。但是有時候我們研究的不是由排列和組合算出來的數字,研究的是生成排列和組合。即,把集合中元素所有的排列和組合全部列出來,然後研究這些序列的性質。今天我用兩種方法講一下如何生成排列。注意我們這裡涉及的順序都是序列的字典序。序列的字典序 設有兩個序列,第乙...

46 全排列 全排列 遞迴

遞迴的時候每次確定乙個位置的數字 nums陣列在遞迴過程中分為左右兩部分,左邊部分是已經確定好的部分,而右邊是待確定數字的部分。每次都嘗試用當前位置右邊的數字來交換當前數字以確定當前數字。題目可以使用collections來優化。詳見 class solution 遞迴過程中每次確定乙個位置的數,遞...

遞迴全排列

遞迴思想,用重複的簡單過程實現乙個複雜的專案,遞迴要素有 1 遞迴的每一層,規模要逐漸縮小 2 遞迴必須有出口,一般每個遞迴函式一開始,是判斷遞迴成立的條件 3 遞迴包括遞進過程和返回過程 4 要注意遞迴實現次數,一般在呼叫遞迴函式前加上遞迴重複條件 常見的結構是 遞迴函式 if 條件成立,例如規模...