不知道作为初学者的你是否在刷题时遇到过求一个数组的全排列,初学者的你是否还在苦苦使用DFS,
这篇讲述一下next_premutation的用法!!
在此之前,我们需要了解STL的sort排序。
现在输入一组数组,来看代码
#include <iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[4];
for(int i=0;i<4;i++){
cin>>a[i];
}
sort(a,a+4);
for(int i=0;i<4;i++){
cout<<a[i]<<" ";
}
return 0;
}
输入一串数,我们可以看到sort()可以按从小到大顺序排列,但这个是数字,如果我们输入字符串呢?
这里我们输入一个字符串:
#include <iostream>
#include<algorithm>
using namespace std;
int main()
{
string a;
cin>>a;
sort(a.begin(),a.end());
cout<<a<<endl;
return 0;
}
我们可以看到sort()排序后,输出的是字符ASCII码值从小到大的顺序
掌握这些后,时不我待,我们来看看全排列!!!
先输入int型的数组!!!
#include <iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[4];
int temp=0;//记录数组每次全排列后加一
for(int i=0;i<4;i++)
{
cin>>a[i];
}
sort(a,a+4);
do
{
for(int i=0;i<4;i++){
cout<<a[i]<<" ";
}
temp++;
cout<<"the number of permutation : "<<temp<<endl;
}while(next_permutation(a,a+4));
return 0;
}
下图就是我们的输出结果,可看到四(n)个数他们的全排列共有24种情况,其实n的全排列共有n!种情况哦
同理,字符串也是类似上述的用法,而且有了这种方法,我们可以轻易的得到一组数他的第几种全排列情况:
#include <iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[4];
int temp=0;//记录数组每次全排列后加一
int n;
for(int i=0;i<4;i++)
{
cin>>a[i];
}
cin>>n;
sort(a,a+4);
do
{
temp++;
if(n==temp)
for(int i=0;i<4;i++)
{
cout<<a[i]<<" ";
}
}while(next_permutation(a,a+4));
return 0;
}
对比上图我们可以知道1 3 4 2 的第四组全排列就是1 3 4 2
啦啦啦啦,next_permutation的用法就介绍到这里啦,后续继续更新STL的相关用法!!!