給出乙個字串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...