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: 递归
以后补充。
解法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(46): Permutations (C++)
- leetcode 46 : Permutations
- leetcode 46: Permutations
- LeetCode力扣之46_Permutations
- LeetCode46——Permutations
- Leetcode 46 - Permutations
- LeetCode46_Permutations
- leetcode[46]Permutations
- LeetCode 46 Permutations
- LeetCode 46 Permutations (全排列)
- Leetcode 46 Permutations
- leetcode-46、47 Permutations/II 数字的排列组合
- LeetCode46:Permutations
- leetcode46/47-Permutations I/II(全排列问题)
- LeetCode 46:Permutations
- 【LEETCODE】46-Permutations
- leetcode 46: permutations
- LeetCode 46 Permutations + LeetCode 47 Permutations II
- 【Leetcode-Medium-46】Permutations
- [leetcode 46] Permutations