题目描述
Given a collection of numbers, return all possible permutations.
For example,
[1,2,3]have the following permutations:
[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2], and[3,2,1].
实现代码:
class Solution {
public:
int start=0;
vector<vector<int>> res;
vector<vector<int> > permute(vector<int> &num) {
if(start == num.size()-1)
{
res.push_back(num);
}
for(int i=start;i<num.size();i++)
{
swap(num[start],num[i]);
start++;
permute(num);
start--;
swap(num[start],num[i]);
}
return res;
}
};
题目描述
Given a collection of numbers that might contain duplicates, return all possible unique permutations.
For example,
[1,1,2]have the following unique permutations:
[1,1,2],[1,2,1], and[2,1,1].
如果num数组中含有重复数字时:
实现代码:
class Solution {
public:
int start=0;
vector<vector<int>> res;
vector<vector<int> > permuteUnique(vector<int> &num) {
if(start == num.size()-1)
{
res.push_back(num);
}
for(int i=start;i<num.size();i++)
{
if(isswap(num,start,i))
{
swap(num[start],num[i]);
start++;
permuteUnique(num);
start--;
swap(num[start],num[i]);
}
}
return res;
}
bool isswap(vector<int>&num,int start,int end)
{
for(int i=start;i<end;i++)
if(num[i]==num[end])
return false;
return true;
}
};