给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
解法一:
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
if(nums.size()==0) return res;
permuteMain(nums, 0);
return res;
}
private:
vector<vector<int>> res;
void permuteMain(vector<int>& nums, int begin)
{
int n=nums.size();
if(begin==n)
{//(1)
res.push_back(nums);
}
else
{
for(int i=begin;i<n;i++)
{
swap(nums[begin], nums[i]);//(2)
permuteMain(nums, begin+1);//(3)
swap(nums[begin], nums[i]);//(4)
}
}
}
};
解法二:
class Solution {
public:
vector<vector<int> > permute(vector<int>& nums) {
vector <vector<int> > ans;
sort(nums.begin(),nums.end());
do
{
ans.push_back(nums);
}while(next_permutation(nums.begin(),nums.end()));
return ans;
}
};