输入一个字符串,输出该字符串中字符的所有组合。

输入一个字符串,输出该字符串中字符的所有组合。,第1张

题目

准备回老家找工作了,复习下算法。
题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。

分析

拿到这种题目,我们要从小的数量级开始分析,由小及大便能找到规律。这里我们拿abc字符串举例进行分析。

(c)
有c, c
无c, 空

(b,c) 
有b, b (c)
无b, (c) 

(a,b,c)
有a, a (b,c)
	-> 有a,无b,无c ->a
	-> 有a,无b,有c ->ac
	-> 有a,有b,无c ->ab
	-> 有a,有b,有c ->abc

无a, (b,c)
	-> 无a,无b,无c ->空  
	-> 无a,无b,有c ->c
	-> 无a,有b,无c ->b
	-> 无a,有b,有c ->bc

由此我们能找到规律,任意字符串的所有组合可以总结为:
第1字符存在的情况余下字符串的组合 和 第1字符不存在的情况余下字符串的组合。这是妥妥的递归的味道。

代码

这里用C++代码实现,devc++ 编译器编译运行。

#include 	// assert
#include  // cout
using namespace std;

// 组合 
void combination(char* pBegin, char* pResult, char* pResultCur) 
{
	assert( pBegin && pResult && pResultCur);
	
	if(*pBegin == ')'<<
	{
		cout << pResult ; endlreturn
		;} 
	// 2部分可以换顺序 
	
	*
	=pResultCur 0 ;combination  
	(+pBegin1,, pResult) pResultCur;// 无当前元素,不存储,pResultCur不变 *
	
	=pResultCur * ;pBegincombination 
	(+pBegin1,, pResult+ pResultCur1);// 有当前元素,存储当前元素,将pResultCur往后走 }
int


main (int, argcchar *[ argv])char
{
	[ pData4]= "abc" ;char
	[ pResult4]= 0 {};combination
	(,pData, pResult) pResult;return
	
	0 ;}

运行结果

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1324334.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-12
下一篇2022-06-12

发表评论

登录后才能评论

评论列表(0条)

    保存