w******t 发帖数: 241 | 1 【 以下文字转载自 CS 讨论区 】
发信人: webcraft (此处不留爷,自有留爷处;处处不留爷,爷), 信区: CS
标 题: 怎样遍历一个字母的组合
发信站: BBS 未名空间站 (Sun Nov 1 23:14:45 2009, 美东)
比如我现在有n个字母(n未知但是有限)a,b,c,d,e,....xx.
想写一个程序遍历这些字母的所有组合。比如ab,ac,ae,abc,abcde,abcdfg,bdefg....
etc.有没有什么好的方法写这个程序?谢谢 | O*******d 发帖数: 20343 | 2 recursive code is the simplest. | O*******d 发帖数: 20343 | 3 #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));
} | O*******d 发帖数: 20343 | 4 My strategy is depth first, not breadth first. | r****t 发帖数: 10904 | 5 letters = 'abcdef...xx'
combs = (c for n in xrange(len(letters)) for c in combinations(letters,n))
then you can iterate though 'combs' as you want. 这里直接用 python 的
itertools.combinations
【在 w******t 的大作中提到】 : 【 以下文字转载自 CS 讨论区 】 : 发信人: webcraft (此处不留爷,自有留爷处;处处不留爷,爷), 信区: CS : 标 题: 怎样遍历一个字母的组合 : 发信站: BBS 未名空间站 (Sun Nov 1 23:14:45 2009, 美东) : 比如我现在有n个字母(n未知但是有限)a,b,c,d,e,....xx. : 想写一个程序遍历这些字母的所有组合。比如ab,ac,ae,abc,abcde,abcdfg,bdefg.... : etc.有没有什么好的方法写这个程序?谢谢
|
|