现在的位置: 首页 > 综合 > 正文

第三十一题 输出字符串字符的几种组合

2018年04月13日 ⁄ 综合 ⁄ 共 738字 ⁄ 字号 评论关闭

题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有abcabacbcabc

思路:类似于第八题中求取和为给定值的多个数

#include <iostream>
#include <vector>
using namespace std;
void Combinationk(char* string, int number, vector<char>& result);
void Combination(char* string)
{
	if(string == NULL)
		return;

	int length = strlen(string);
	vector<char> result;
	for(int i = 1; i <= length; ++ i)
	{
		Combinationk(string, i, result);
	}
}

void Combinationk(char* string, int number, vector<char>& result)
{
	if(number == 0)
	{
		vector<char>::iterator iter = result.begin();
		for(; iter < result.end(); ++ iter)
			printf("%c", *iter);
		printf("\n");

		return;
	}

	if(*string == '\0')
		return;
	result.push_back(*string);
	Combinationk(string + 1, number - 1, result);
	result.pop_back();

	Combinationk(string + 1, number, result);
}
int main()
{
	char str[]={"abcdef"};

	Combination(str);
	return 0;
}

抱歉!评论已关闭.