您的位置:首页 > 其它

Leetcode-46: Permutations

2018-03-19 14:30 585 查看
这题是经典题:
解法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: 递归
以后补充。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Leetcode