例如,如果输入字符串是“ABC”,那么输出应该是“ABC, ACB, BAC, BCA, CAB, CBA”。
这是我的方法:
#include<stdio.h>
#include<conio.h>
#include<string.h>
void print(char str[],int visited[],int index,char temp[],int len)
{
if(index==len)
{
temp[index]='\0';
printf("\n%s",temp);
return;
}
for(int i=0;i<len;i++)
{
if(!visited[str[i]-'A'])
{
visited[str[i]-'A']=1;
temp[index]=str[i];
print(str,visited,index+1,temp,len);
visited[str[i]-'A']=0;
}
}
}
int main()
{
int visited[20]={0};
char temp[20];
char str[] = "ABCD";
int len=strlen(str);
print(str,visited,0,temp,len);
getch();
return 0;
}
我使用了一个访问过的数组来避免重复字符。这段代码的复杂性是多少?