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]
.
// NON-SWAP VERSION:
class Solution {
public:
vector<vector<int> > solution;
vector<int> singleSolution;
void helper(vector<int> & num, vector<bool> & visited){
if (singleSolution.size()==num.size())
solution.push_back(singleSolution);
else{
for (int i=0;i<num.size();i++){
if (!visited[i]){
visited[i] = true;
singleSolution.push_back(num[i]);
helper(num, visited);
singleSolution.pop_back();
visited[i] = false;
}
}
}
}
vector<vector<int> > permute(vector<int> &num) {
if (num.size()==0) return solution;
vector<bool> visited(num.size(), false);
helper(num, visited);
return solution;
}
};
// SWAP VERSION:
class Solution {
public:
vector<vector<int> > solution;
void helper(vector<int> & num, int index){
if (index==num.size()-1)
solution.push_back(num);
else{
for (int i=index;i<num.size();i++){
swap(num[index], num[i]);
helper(num, index+1);
swap(num[index], num[i]);
}
}
}
vector<vector<int> > permute(vector<int> &num) {
if (num.size()==0) return solution;
helper(num, 0);
return solution;
}
};