求字符串的所有组合

问题:求一个字符串的所有组合。

解答:题意很清楚,是求一个字符串的所有组合,属于中学数学知识的范畴,如给定字符串str="abc",则他的所有组合有:a、b、c、ab、ac、bc、abc。交换两个字符时虽然能得到两个不同的排列,但是却属于同一个组合,比如ab和ba是不同的排列,但是只能算一个组合。

 

#include "stdafx.h"
#include <vector>

void Permutation(char* pStr, std::vector<char> path);

void Permutation(char* pStr)
{
    if(pStr == NULL)
        return;

	std::vector<char> path;
    Permutation(pStr, path);
}

void Permutation(char* pStr, std::vector<char> path)
{
	if(*pStr=='\0')
	{
		std::vector<char>::iterator iter = path.begin();
		for(;iter!=path.end();++iter)
			printf("%c",*iter);
		printf("\n");
	}
	else
	{	
		Permutation(pStr+1, path);

		path.push_back(pStr[0]);
		Permutation(pStr+1, path);
		path.pop_back();
	}

}
// ====================测试代码====================
void Test(char* pStr)
{
    if(pStr == NULL)
        printf("Test for NULL begins:\n");
    else
        printf("Test for %s begins:\n", pStr);

    Permutation(pStr);

    printf("\n");
}

int _tmain(int argc, _TCHAR* argv[])
{
    Test(NULL);

    char string1[] = "";
    Test(string1);

    char string2[] = "a";
    Test(string2);

    char string3[] = "ba";
    Test(string3);

    char string4[] = "kjIhfedcba";
    Test(string4);

    return 0;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值