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].
思路:深度优先搜索。
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> result;
vector<int> temp;
dfs(result,nums,0,temp);
return result;
}
private:
void dfs(vector<vector<int>> &result,vector<int> &nums,int size,vector<int> temp){
//达到指定深度
if(size==nums.size()){
result.push_back(temp);
return;
}
for(int num : nums){
//防止重复。如果某个数已经加入了结果集,则跳过此数。
if(find(temp.begin(),temp.end(),num)!=temp.end()) continue;
else{
temp.push_back(num);
dfs(result,nums,size+1,temp);
temp.pop_back();
}
}
}
};
解法二
class Solution {
public:
vector<vector<int> > permute(vector<int> &num) {
vector<vector<int> > ret;
Helper(ret, num, 0);
return ret;
}
void Helper(vector<vector<int> >& ret, vector<int> num, int pos)
{
if(pos == num.size()-1)
ret.push_back(num);
else
{
for(int i = pos; i < num.size(); i ++)
{//swap all the ints to the current position
swap(num[pos], num[i]);
Helper(ret, num, pos+1);
swap(num[pos], num[i]);
}
}
}
};