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:
void perm(vector<int> &num, vector<vector<int> >&result,
int nStart, int nEnd)
{
if (nStart < nEnd-1)
{
perm(num, result, nStart+1, nEnd);
for (int i = nStart + 1; i < nEnd; ++i)
{
int tmp = num[nStart];
num[nStart] = num[i];
num[i] = tmp;
perm(num, result, nStart+1, nEnd);
num[i] = num[nStart];
num[nStart] = tmp;
}
}
else
{
result.push_back(num);
}
}
vector<vector<int> > permute(vector<int> &num) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<vector<int> >result;
perm(num, result, 0, num.size());
return result;
}
};