全排列 dfs回溯 set去重

2021-07-31 00:12:08 字數 1246 閱讀 5507

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

輸出為:

1123

1132

1213

1231

1312

1321

2113

2131

2311

3112

3121

3211

input

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

output

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

input示例

1312

output示例

1123

1132

1213

1231

1312

1321

2113

2131

2311

3112

3121

3211

解析 : 首先肯定用dfs沒問題,先用了dfs就會發現會有重複元素,所以要 去重,所以就想到了可以用set來維護。。

**

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define clr(a,b) memset((a),(b),sizeof(a))

#define inf 0x3f3f3f3f

#define mod 100009

#define ll long long

#define m 10000

#define ll o<<1

#define rr o<<1|1

#define lson o<<1,l,mid

#define rson o<<1|1,mid+1,r

using

namespace

std;

char s[12];

char ss[12];

int len;

int vis[12]; set

s;void dfs(int step) //得到全排列

}}int main()

46 全排列(dfs回溯)

c 解法1 按陣列元素順序依次插入排列 12,21 3 12,132,12 3,3 21,2 31,213 4 312,3 412,31 42,312 4,我這裡使用的就是上圖這種依次插入的方式,每新增一位,在原有基礎上依次插入,刪除舊的,替換新的。這裡主要是太多插入刪除操作導致執行時間過長,記憶體...

全排列和去重全排列 遞迴實現

一 全排列的概念 根據360百科,我們知道從n個不同元素中任取m m n 個元素,按照一定的順序排列起來,叫做從n個不同元素中取出m個元素的乙個排列。當m n時所有的排列情況叫全排列。二 全排列的演算法 三 接下來我們學習第一種方法 遞迴實現全排列 include include using nam...

回溯(全排列)

題 輸出自然數 1 到 n 所有不重複的排列,即 n 的全排列,要求所產生的任一數字序列中不允許出現重複的數字。輸入格式 乙個整數 n 1 n 9 輸出格式 由 1 n組成的所有不重複的數字序列,每行乙個序列。每個數字保留 5個常寬。sample input 3sample output 1 2 3...