例如 char a[]="abcd"
求这个数组的全排列,将复杂问题或者不能直接解决的问题转变为多个简单问题的方法就是,让所有的元素一次成为第一个元素,
void Traversal(char* const a,char* const pBegin)
{
if(NULL==a)
return;
if('\0'==*pBegin)
{
cout<<a<<endl;
}
else
{
for(char* ptr=pBegin;*ptr!='\0';ptr++)
{
char temp=*ptr;
*ptr=*pBegin;
*pBegin=temp;
Traversal(a,pBegin+1);
temp=*ptr;
*ptr=*pBegin;
*pBegin=temp;
}
}
}
哈哈,根据剑指offer以下就做出来了,真是不看不知道一看吓一跳,不过,我遇到的问题却是在调用方式上
int main()
{
char *str="abcd";
Traversal(str,str);
return 0;
}
这样调用就会出现写入地址错误,后来想了想,妹的,str分配到了常量区是制度属性的。
后来改成了
char str[]="abcd"
万事大吉、。。。