左神算法基础class8—题目4打印字符串的全排列

左神算法基础class8—题目4打印字符串的全排列

1.题目:打印一个字符串的全部排列

2.分析

先固定字符串的第一个元素,再求解剩余字符串的全排列,求解方法又和本问题相同,递归解题
①遍历所有可能出现的首字符:使用交换的方法,按顺序依次交换其他元素与第一个元素
②固定住第一个元素,再递归第二个起的元素
③结束条件是当前递归的元素是最后一个元素:索引为字符串长度减一

3.完整代码

#include<iostream>
#include<string>
using namespace std;

void swap(char &a,char &b)
{
	char tmp = a;
	a = b;
	b = tmp;
}
void print(string s,int beg)
{ 
	if(beg == s.size() - 1)
	{
		cout << s << endl;
		return ;
	}
	else
	{
		for(int i = beg; i < s.size();i++)
		{
			swap(s[i],s[beg]);	//交换
			print(s,beg + 1);	//递归
			swap(s[i],s[beg]);	//回溯,交换回来
		}
	}
}

int main()
{
	string s = "abc";
	print(s,0);

	return 0;
}

4.结果及额外要求

在这里插入图片描述
注:
1.本题没要求去重,如果需要去重可以
①将要输出时的字符串加入set容器中,查找没有再输出
②使用vector 进行存储所有的串,在find函数中查找,没有时再输出
2.要求按照字典序输出,main()函数中先使用sort函数对字符串排序,再继续

发布了51 篇原创文章 · 获赞 1 · 访问量 1362

猜你喜欢

转载自blog.csdn.net/shi_xiao_xuan/article/details/104826037