JSMS40-字符串组合问题-剑指offer28

99 阅读1分钟

题目描述:这道题就是让你输入:{'a','b','c'},这样的数组,然后返回相应的组合,'abc','acb','bac','bca','cab','cba'。

解析:这道题书上解析用的递归,相对来说递归要简单,逻辑清晰很多。

#include <stdio.h>
#include <stdlib.h>

void perhost(char *str,char *beginStr)    //
{
	if(*beginStr=='\0')           //当beginStr=='\0',打印
	{
		printf("%s\n",str);   //这里打印str实际上是打印下面循环中交换过后的str,
	}else
	{
		for(char *p=beginStr;*p!='\0';++p)    //这里进入循环
		{
			char tmp=*p;        //下面是交换,从beginStr[0]开始
			*p=*beginStr;       
			*beginStr=tmp;
			perhost(str,beginStr+1); //递归进去,然后交换beginstr[0+1]和beginStr[0+x]
			
			tmp=*p;
			*p=*beginStr;
			*beginStr=tmp;			
		}
	}
}

void host(char *str)              
{
	if(str==NULL)            //如果str==NULL,return
	{
		return;
	}
	perhost(str,str);        //字符数组传两次进去
}

int main()
{
	char str[]={'b','c','d'};    //传进去的字符数组。
	host(str);
}