一个词所有可能的组合

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 )
{ //....}