说我有数字1,2,3。算法会是什么样子,以便在所有可能的大小中采用所有可能的排列。输出:
1, 2 ,3 | 3, 2 ,1 | 2, 1 ,3 | 1, 3, 2 ... | 1, 2 | 2, 1 | 3, 1 |..... 1 | 2 | 3
您是否只需执行常规排列算法并输入每个字母数量作为子问题?
答案 0 :(得分:0)
您需要生成所有可能的子集并对其进行置换。
伪代码(遵循C ++)
generate (a[]) {
int size = a.size;
sort(a)
for (i = 1; i < (1<<size); i++) {
b[];
for (j = 0; j < size; j++) {
if (i&(1<<j)) {
add a[j] to b;
}
}
do {
for (i=0 to b.size) {
print b[i];
}
}while(next_permutation(b.begin(), b.end());
}
}