<LeetCode>46. 全排列

给定一个没有重复数字的序列,返回其所有可能的全排列。

示例:

输入: [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; 
    }
};

猜你喜欢

转载自blog.csdn.net/w8253497062015/article/details/80158775