C++数据结构与算法\排列组合Permutations()

本文介绍了如何在C++中实现排列组合算法,通过详细讲解并提供代码示例,帮助理解工作原理,优化效率。
摘要由CSDN通过智能技术生成

7、排列组合

先封装一个函数:

void Permutations(char* num, const int Findex, const int Lindex) // Findex/Lindex = 开始下标/结束下标
{
	/// 假设又有一个 char num = "abc";
	// a开头,后面是bc的所有排列
	swap(p[0], p[0]);		// a和a自己进行交换         			  1
	Permutations(p, 1, 2);	// 递归调用自己						  2
	swap(p[0], p[0]);		// 再换回来,换回abc					  3
	// b开头,后面是ac的所有排列
	swap(p[0], p[1])		// a和b交换位置, 就成了b开头 bac			1
	Permutations(p, 1, 2);	// 递归调用自己						  2
	swap(p[0], p[1]);		// 再交换回来,换回abc					 3
	// c开头,后面是ab的所有排列
	swap(p[0], p[2]);		// a和c交换位置,就成了c开头 cab			1
	Permutations(p, 1, 2);	// 递归调用自己						   2
	swap(p[0], p[2]);		// 再换回来,换回abc					   3
}

这样写可以帮助理解工作原理。理解了之后,可以发现重复步骤较多,可以升级成一个for循环:

void Permutations(char* num, const int Findex, const int Lindex) // Findex/Lindex = 开始下标/结束下标
{	// 结束条件
	if (Findex == Lindex)
	{
		//结束了就把最后的结果打印
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值