栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

题目

准备回老家找工作了,复习下算法。
题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入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 << endl;
		return; 
	}
	
	// 2部分可以换顺序 
	*pResultCur = 0;  
	combination(pBegin+1, pResult, pResultCur); // 无当前元素,不存储,pResultCur不变
	
	*pResultCur = *pBegin; 
	combination(pBegin+1, pResult, pResultCur+1); // 有当前元素,存储当前元素,将pResultCur往后走
}


int main(int argc, char* argv[])
{
	char pData[4] = "abc";
	char pResult[4] = {0};
	combination(pData, pResult, pResult);
	
	return 0;
}
运行结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/947595.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号