这题是经典题:
解法1:用next_permutation()。要注意next_permuation()返回bool,当permutation到最大序列的时候就返回false(要注意它还能继续迭代)。要注意不能用这个返回值来控制while()循环的结束,否则当输入vec={2,3,1}时,迭代到{3,2,1}时就结束了,前面的序列都不能显示。这里必须用factorial来控制while()循环的迭代次数。
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int factorial(int num) {
int ret=1;
for (int i=1; i<=num; i++)
ret*=i;
return ret;
}
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int> > ivec;
int i=1;
do{
ivec.push_back(nums);
next_permutation(nums.begin(), nums.end());
}while(i++ <factorial(nums.size()));
return ivec;
}
int main()
{
vector<int> a={0,1,-1};
vector<vector<int> > sol;
sol = permute(a);
for (auto it1=sol.begin(); it1<sol.end(); it1++) {
for (auto it2=(*it1).begin(); it2<(*it1).end(); it2++) {
cout<<*it2<<" ";
}
cout<<endl;
}
return 0;
}
解法2:位运算
解法3: 递归
以后补充。