一个词所有可能的组合
All possible combinations of a word
我正在参加工作面试,他们要求我生成给定 字符串 的所有可能 排列 的列表。我的解决方案效率低下,面试我的人告诉我我应该使用递归。
有人知道这个问题吗?
这是一道经典的面试题,答案是这样的:
int permu(char* str, size_t len ,size_t index )
{
size_t i = index - 1;
if(index == len) { printf ("%s\n",str); }
while (++i < len)
{
swap (str,index,i); /* swap between index and i */
permu(str, len ,index + 1 ); /* recorsion */
swap (str,index,i); /* swap back between index and i */
}
return(0);
}
注意,在此代码中,用户应在索引参数中给出 0
所以最好像这样调用这个函数:
int permutations(char* str, size_t len)
{
return (permu(str, len ,0));
}
static int permu(char* str, size_t len ,size_t index )
{ //....}
我正在参加工作面试,他们要求我生成给定 字符串 的所有可能 排列 的列表。我的解决方案效率低下,面试我的人告诉我我应该使用递归。 有人知道这个问题吗?
这是一道经典的面试题,答案是这样的:
int permu(char* str, size_t len ,size_t index )
{
size_t i = index - 1;
if(index == len) { printf ("%s\n",str); }
while (++i < len)
{
swap (str,index,i); /* swap between index and i */
permu(str, len ,index + 1 ); /* recorsion */
swap (str,index,i); /* swap back between index and i */
}
return(0);
}
注意,在此代码中,用户应在索引参数中给出 0 所以最好像这样调用这个函数:
int permutations(char* str, size_t len)
{
return (permu(str, len ,0));
}
static int permu(char* str, size_t len ,size_t index )
{ //....}