w******t 发帖数: 241 | 1 比如我现在有n个字母(n未知但是有限)a,b,c,d,e,....xx.
想写一个程序遍历这些字母的所有组合。比如ab,ac,ae,abc,abcde,abcdfg,bdefg....
etc.有没有什么好的方法写这个程序?谢谢 | b******u 发帖数: 469 | 2 递归?
遍历(a1-an) = a1 U 遍历(a2-an) U 遍历(a2-an)
【在 w******t 的大作中提到】 : 比如我现在有n个字母(n未知但是有限)a,b,c,d,e,....xx. : 想写一个程序遍历这些字母的所有组合。比如ab,ac,ae,abc,abcde,abcdfg,bdefg.... : etc.有没有什么好的方法写这个程序?谢谢
| j****a 发帖数: 1277 | 3 permutation?
【在 w******t 的大作中提到】 : 比如我现在有n个字母(n未知但是有限)a,b,c,d,e,....xx. : 想写一个程序遍历这些字母的所有组合。比如ab,ac,ae,abc,abcde,abcdfg,bdefg.... : etc.有没有什么好的方法写这个程序?谢谢
| w******t 发帖数: 241 | 4 不是permutation,只是组合,比如(a1,a2) = (a2,a1)
【在 j****a 的大作中提到】 : permutation?
| w******t 发帖数: 241 | 5 恩,这是个不错的。我想想看。不知道这个是不是最优的了
【在 b******u 的大作中提到】 : 递归? : 遍历(a1-an) = a1 U 遍历(a2-an) U 遍历(a2-an)
| O*******d 发帖数: 20343 | 6 #include
#include
static char buffer[32];
void Combination(int currentLen, char *charSet, int n)
{
int i;
for(i = 0; i < n; ++i)
{
buffer[currentLen] = charSet[i];
buffer[currentLen + 1] = '\0';
printf("%s\n", buffer);
Combination(currentLen + 1, charSet + 1 + i, n - 1 - i);
}
}
void main()
{
char charSet[] = "abcdefg";
Combination(0, charSet, strlen(charSet));
} | t******e 发帖数: 1293 | 7 和programming interview exposed上面的不一致
【在 O*******d 的大作中提到】 : #include : #include : static char buffer[32]; : void Combination(int currentLen, char *charSet, int n) : { : int i; : for(i = 0; i < n; ++i) : { : buffer[currentLen] = charSet[i]; : buffer[currentLen + 1] = '\0';
| g*******y 发帖数: 1930 | 8 void printCombination(const T *arr, int N, int start){
static bool *select = new bool[N](); //记录哪些元素当前choose要打印的
for(int i=0;i!=N;i++){ if(select[i]) cout<
for(int i=start;i!=N;i++){
if(!select[i]){
select[i]=1;
printCombination(arr,N,i+1);
select[i]=0;
}
}
} | g*******y 发帖数: 1930 | 9 不用额外数组的方法:
void printCombination(T *arr, int N, int start){
for(int i=0;i!=start;i++){ cout<
for(int i=start;i!=N;i++){
swap(arr[start],arr[i]);
printCombination(arr,N,start+1);
swap(arr[start],arr[i]);
}
} | O*******d 发帖数: 20343 | 10 My code will output all combinations, not permutation.
abc,acb, bac, bca, cba and cab are all the same.
【在 t******e 的大作中提到】 : 和programming interview exposed上面的不一致
| O*******d 发帖数: 20343 | 11 Here is the result from a set (a, b, c)
a
ab
abc
ac
b
bc
c | a****9 发帖数: 418 | 12 用python可以很简洁的做到
enum=lambda x: [[]] if x ==[] else [[x[0]]+a for a in enum(x[1:])] + enum(x[
1:])
enum([1,2,3])输出:
[[1, 2, 3], [1, 2], [1, 3], [1], [2, 3], [2], [3], []]
【在 w******t 的大作中提到】 : 恩,这是个不错的。我想想看。不知道这个是不是最优的了
|
|