Given a collection of distinct 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]
.
Subscribe to see which companies asked this question
方法一:
class Solution {
private:
vector<vector<int>> res;
vector<int> ans;
unordered_set<int> a;
public:
vector<vector<int>> permute(vector<int>& nums) {
if(nums.empty())
return res;
dfs(0,nums);
return res;
}
void dfs(int s,vector<int> &nums)
{
if(s==nums.size())
res.push_back(ans);
for(int i=0;i<nums.size();i++)
{
if(a.find(nums[i])!=a.end())
continue;
a.insert(nums[i]);
ans.push_back(nums[i]);
dfs(s+1,nums);
ans.pop_back();
a.erase(nums[i]);
}
}
};
方法二:
class Solution {
public:
vector<vector<int> > permute(vector<int> &num)
{
vector<vector<int> > vvi;
permute(num, 0, vvi);
return vvi;
}
private:
void permute(vector<int> &num, int i, vector<vector<int> > &vvi)
{
if(i == num.size())
{
vvi.push_back(num);
return;
}
for(int j = i; j < num.size(); ++ j)
{
swap(num[i], num[j]);
permute(num, i + 1, vvi);
swap(num[i], num[j]);
}
}
};