字串s(包含0-9,可能有重複的字元),按照字典序從小到大,輸出s包括的字元組成的所有排列。
回溯問題,本質是dfs問題。
首先統計字串中各個字元的出現次數,存入陣列cnt[10],然後進行深度搜尋。
深度搜尋的規則為對於第i位,按照字典序0-9,如果cnt[k]不為0,則cnt[k]- -,進行第i+1位的搜尋,回溯回來需要cnt[k]++恢復原樣。
#include
#include
#define for(n, a, b) for(int n = a; n < b; ++n)
#define for_iter(n, c) for(auto n = c.begin(); n != c.end(); ++n)
using
namespace
std;
void dfs(int* cnt, int l, string head)
else}}
}int main()
; cin >> s;
for_iter(n, s)
cnt[*n - '0'] ++;
dfs(cnt, s.length(), "");
return
0;}
51nod 1384 全排列 遞迴
1384 全排列 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 給出乙個字串s 可能有重複的字元 按照字典序從小到大,輸出s包括的字元組成的所有排列。例如 s 1312 輸出為 1123 1132 1213 1231 1312 1321 2113 2131 2311 3...
51NOD1384 全排列(全排列函式)
1384 全排列 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 給出乙個字串s 可能有重複的字元 按照字典序從小到大,輸出s包括的字元組成的所有排列。例如 s 1312 輸出為 input 輸入乙個字串s s的長度 9,且只包括0 9的阿拉伯數字 output 輸出s所...
51nod 1384 全排列 (回溯 STL)
給出乙個字串s 可能又重複的字元 按照字典序從小到大,輸出s包括的字元組成的所有排列。例如 s 1312 輸出為 1123 1132 1213 1231 1312 1321 2113 2131 2311 3112 3121 3211 input 輸入乙個字串s s的長度 9,且只包括0 9的阿拉伯數...