字符串的排列(栈和队列)

字符串的排列(栈和队列)

时间: 1ms        内存:1000M

描述:

题目:输入一个字符串,打印出该字符串中字符的所有排列。
例如输入字符串abc,则输出由字符abc所能排列出来的所有字符串
abc
acbbacbcacabcba

输入:

输入:

abc

输出:

输出:

abc acb bac bca cab cba

示例输入:

abc

示例输出:

abc acb bac bca cab cba

提示:

参考答案(内存最优[752]):

#include <stdio.h>
#include <string.h>
#define max 100
int used[max],n,k;
char res[max],c[max];
void output()
{
        int i;
        for(i=1;i<=n;i++)
              printf("%c",res[i]);
        printf(" ");
}
void permutation(int no)
{
        int i;
        if(no>n)
            output();                          
        else                                     
              for(i=1;i<=n;i++)            
                    if(!used[i])              
                    {
                       res[no]=c[i-1];        
                       used[i]=1;           
                       permutation(no+1);
                       used[i]=0;
                     }
}
int main()
{
	int i;
	k=1;
	gets(c);
	n=strlen(c);
    for(i=1;i<=n;i++)
	     used[i]=0;              
    permutation(1);
	printf("\n");
	return 0;
}

参考答案(时间最优[0]):

#include <stdio.h>
#include <string.h>
#define max 100
int used[max],n,k;
char res[max],c[max];
void output()
{
        int i;
        for(i=1;i<=n;i++)
              printf("%c",res[i]);
        printf(" ");
}
void permutation(int no)
{
        int i;
        if(no>n)
            output();                          
        else                                     
              for(i=1;i<=n;i++)            
                    if(!used[i])              
                    {
                       res[no]=c[i-1];        
                       used[i]=1;           
                       permutation(no+1);
                       used[i]=0;
                     }
}
int main()
{
	int i;
	k=1;
	gets(c);
	n=strlen(c);
    for(i=1;i<=n;i++)
	     used[i]=0;              
    permutation(1);
	printf("\n");
	return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注