[leetcode-46-Permutations]

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],
[3,2,1]
]

思路:

参考别人的方法,将所有的数分别与第一个数交换。。。待学习。。

void permuteCore2(vector<vector<int>>& result, vector<int>& nums , int index)
    {
        if (index == nums.size())
        {
            result.push_back(nums);
        }
        for (int i = index; i < nums.size(); i++)
        {
            swap(nums[i], nums[index]);
            permuteCore2(result, nums,index + 1);
            swap(nums[i], nums[index]);
        }
    }
    void permuteCore(vector<vector<int>>& result,vector<int>& nums, vector<int>& temp,int index)
    {
        if (index == nums.size())
        {
            result.push_back(temp);
        }
        for (int i = index; i < nums.size();i++)
        {
            
            temp.push_back(nums[i]);
            swap(nums[i], nums[index]);
            permuteCore(result, nums, temp, index + 1);
            swap(nums[i], nums[index]);
            temp.pop_back();
            
        }
    }
    vector<vector<int>> permute(vector<int>& nums)
    {
        vector<vector<int>>result;
        vector<int> temp;
        sort(nums.begin(),nums.end());
        //permuteCore(result, nums, temp, 0);
        permuteCore2(result, nums,0);
        return result;
    }

参考:

http://blog.csdn.net/happyaaaaaaaaaaa/article/details/51534048

原文地址:https://www.cnblogs.com/hellowooorld/p/6518357.html