class Solution {
//DFS
public:
vector<vector<int> > permute(vector<int> &num) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int n = num.size();
if(0 == n) return vector<vector<int> >();
sort(num.begin(), num.end());
vector<bool> used(num.size(), false);
vector<vector<int>> ans;
vector<int> path;
permute_aux(n, used, path, ans, num);
return ans;
}
void permute_aux( int n, vector<bool>& used, vector<int>& path, vector<vector<int>>& ans, const vector<int>& num )
{
//throw std::exception("The method or operation is not implemented.");
if(0 == n)
{
ans.push_back(path);
return;
}
for (int i = 0; i < used.size(); ++i)
{
if(false == used[i])
{
used[i] = true;
path.push_back(num[i]);
permute_aux(n-1, used, path, ans, num);
used[i] = false;
path.pop_back();
}
}
}
};
second time
class Solution {
public:
void permuteUtil(vector<int>& num, vector<bool>& used, vector<int>& path, vector<vector<int> >& allPath)
{
if(path.size() == num.size())
{
allPath.push_back(path);
return ;
}
for(int i = 0; i < num.size(); ++i)
{
if(!used[i])
{
used[i] = true;
path.push_back(num[i]);
permuteUtil(num, used, path, allPath);
path.pop_back();
used[i] = false;
}
}
}
vector<vector<int> > permute(vector<int> &num) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<vector<int> > allPath;
vector<int> path;
vector<bool> used(num.size(), false);
permuteUtil(num, used, path, allPath);
return allPath;
}
};