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].
集合中的元素没有重复的。。。
利用STL中的next_permutation函数来实现。
但是要注意,next_permutation是按字典顺序取下一个排列,如果原始序列不是字典顺序的话,则会有一部分排列无法取得。
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
//存放返回结果
vector<vector<int>> res;
//先将原始序列字典排序,确保后面使用next_permutation能够得到全部的排序
sort(nums.begin(),nums.end());
res.push_back(nums);
//注意next_permutation是按字典顺序排序。如果原始的序列不是字典顺序,则会有部分排列被省略
while(next_permutation(nums.begin(),nums.end()))
{
res.push_back(nums);
}
return res;
}
};
利用剑指offer中的方式。
void nextPermute(vector<vector<int>> &res,vector<int>& nums,int begin)
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
//存放返回结果
vector<vector<int>> res;
if (nums.empty())
return res;
nextPermute(res, nums, 0);
return res;
}
void nextPermute(vector<vector<int>> &res,vector<int>& nums,int begin){
if(begin==nums.size()-1)
{
res.push_back(nums);
return;
}
//递归三个主要的步骤~!swap,递归,在swap
for(int i=begin;i!=nums.size();++i)
{
swap(nums[i],nums[begin]);
nextPermute(res,nums,begin+1);
swap(nums[i],nums[begin]);
}
}
};