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:
vector<vector<int> > permute(vector<int> &num) {
vector<vector<int> > result;
int end = num.size() - 1;
perProcess(result, num, 0, end );
return result;
}
private:
void perProcess(vector<vector<int> > &result,vector<int> &num, int start, int end){
if (start == end){
result.push_back(num);
}
else{
for (size_t i = start; i <= end; i++)
{
if (isSwap(num, start, i)){
swapNum(num, start, i);
perProcess(result, num, start + 1, end);
swapNum(num, i, start);
}
}
}
}
void swapNum(vector<int> &num, int a, int b){
int temp = num[a];
num[a] = num[b];
num[b] = temp;
}
bool isSwap(vector<int> &num, int start, int end){
for (size_t i = start; i < end; i++)
{
if (num[i] == num[end])
return false;
}
return true;
}
};