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 {
void swap(int &i, int &j)
{
int tmp = i;
i = j;
j = tmp;
}
void foo(int A[], int num, vector<int> &curVector, vector<vector<int>> &retVector)
{
if (num == 0)
{
retVector.push_back(curVector);
return;
}
for (int i=0; i<num; i++)
{
swap(A[0], A[i]);
curVector.push_back(A[0]);
foo(&A[1], num-1, curVector, retVector);
curVector.pop_back();
swap(A[0], A[i]);
}
}
public:
vector<vector<int> > permute(vector<int> &num) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<int> curVector;
vector<vector<int>> retVector;
for (int i=0; i<num.size(); i++)
{
swap(num[0], num[i]);
curVector.push_back(num[0]);
foo(&num[1], num.size()-1, curVector, retVector);
curVector.pop_back();
swap(num[0], num[i]);
}
return retVector;
}
};