您的位置:首页 > 职场人生

面试训练字符串全排列

2012-09-10 11:41 211 查看


这道题目看起来像递归,思路还是不够清晰。

海涛的思路 是 首先 确定第一位的元素,然后确定后面的第二位的元素,这样递归向下知道遇到最后一个'\0'打印字符串。

这样递归起来的思路就很清晰了,

1 第一位和后面某位交换,

2 递归进入 后序再相似处理

3 还原第一位原来的元素。

这样代码写起来就顺手了。但是注意一点就是递归退出条件。为字符串结尾。

我该题开始犯的错误

1 打印错误,我实在交换后打印一个字符然后连续打印字符。此时出现的问题 就是递归未还原以前的元素,我就打印,这样产生问题

代码如下

#include "stdio.h"
#include "string.h"

void listStr(char *str,int start,int end)
{
	int st =start;
	int ed=end;
	char ch;
        if(str == NULL)
            return;
        if(str[start]=='\0')
	{
		printf("%s\n",str);
	}
	else
	{
		for(;st<=end;st++)
		{
			ch = str[start];
			str[start]=str[st];
			str[st]=ch;	
			listStr(str,start+1,end);	
			ch = str[start];
			str[start]=str[st];
			str[st]=ch;
		}
	}

}

int main()
{
	char str[1024];
	int len;
	int start;
	scanf("%s",str);
	len = strlen(str);
	listStr(str,0,len-1);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: