由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
CS版 - 怎样遍历一个字母的组合
相关主题
Re: 请问大牛们leetcode上的Permutations II (转载)[求推荐] 群论的教科书
C++ static member method with default arguments (转载)问一个很初级的编程问题
问个图的算法弱弱的问个内核遍历当前进程的子进程的一小段程序 (转载)
曾经有个教授对我说,最难的算法问题就是。。。 (转载)如何提高一个java写的程序的运行效率
怎么用lex处理DFA?请问一个Framemaker的问题
牛人请来看看这个问题?优化问题还是NP?[转载] metapost???
请教一算法问题并列第一作者
请教一个多维遍历问题问问文章排名的问题
相关话题的讨论汇总
话题: arr话题: charset话题: int话题: enum话题: currentlen
进入CS版参与讨论
1 (共1页)
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 的大作中提到】
: 恩,这是个不错的。我想想看。不知道这个是不是最优的了
1 (共1页)
进入CS版参与讨论
相关主题
问问文章排名的问题怎么用lex处理DFA?
国内本科成绩单,只有英文,没中文可以吗?有平均分,没GPA可以吗?牛人请来看看这个问题?优化问题还是NP?
gmail规定ID最少6个字母很恶心请教一算法问题
再问个JAVA hashMap的问题请教一个多维遍历问题
Re: 请问大牛们leetcode上的Permutations II (转载)[求推荐] 群论的教科书
C++ static member method with default arguments (转载)问一个很初级的编程问题
问个图的算法弱弱的问个内核遍历当前进程的子进程的一小段程序 (转载)
曾经有个教授对我说,最难的算法问题就是。。。 (转载)如何提高一个java写的程序的运行效率
相关话题的讨论汇总
话题: arr话题: charset话题: int话题: enum话题: currentlen