全排列(DFS遞迴 STL set)

2021-08-04 21:35:28 字數 1127 閱讀 3462

給出乙個字串s(可能有重複的字元),按照字典序從小到大,輸出s包括的字元組成的所有排列。例如:s = "1312",

輸出為:

1123

1132

1213

1231

1312

1321

2113

2131

2311

3112

3121

3211

input

輸入乙個字串s(s的長度 <= 9,且只包括0 - 9的阿拉伯數字)

output

輸出s所包含的字元組成的所有排列

sample input

1312

sample output

1123

1132

1213

1231

1312

1321

2113

2131

2311

3112

3121

3211

此題題意就不再贅述了。思路是:將輸入的數字存入string裡,然後按照位置乙個乙個排,排好乙個解就存入set裡,因為set可以自動按大小排序,所有取出列印的時候只要遍歷一遍就好了

ac**:

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

int len; //定義len表示讀入數字的個數

char a[12];

int vis[12]=;

string str;

sets;

void dfs(int deep)

for(int i=1;i<=len;i++)

}}int main()

{ cin>>str; //讀入一組數字

s.clear(); //將要存入答案的集合清空(是乙個好的習慣)

len=str.size();

dfs(1);

for(set::iterator it=s.begin();it!=s.end();it++){ //遍歷set,自動按字典順序輸出

cout<<*it<

46 全排列 全排列 遞迴

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

遞迴全排列

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

全排列(遞迴)

給定乙個由不同的小寫字母組成的字串,輸出這個字串的所有全排列。我們假設對於小寫字母有 a b y z 而且給定的字串中的字母已經按照從小到大的順序排列。輸入只有一行,是乙個由不同的小寫字母組成的字串,已知字串的長度在1到6之間。輸出這個字串的所有排列方式,每行乙個排列。要求字母序比較小的排列在前面。...