字符串的排列(栈和队列)
时间: 1ms 内存:1000M
描述:
题目:输入一个字符串,打印出该字符串中字符的所有排列。
例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串
abc、acb、bac、bca、cab和cba。
输入:
输入:
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;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。