[leetcode 46] Permutations------数组中元素的所有排列组合集合

来源:互联网 发布:阿里云大数据应用学院 编辑:程序博客网 时间:2024/05/22 17:35

Question:

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].

分析:

此题目是求一个没有重复数据的数组的所有元素排列组合,

思路很简单,原来的数组分为两部分,第一个元素和后面所有的元素,这样求剩下元素的排列组合即可,即求出了以第一个元素为首的的排列组合;第二步:将第一个元素依次与后面的元素交换。

我第一次实现的代码比较暴力,是固定最后一个元素,每次将当前的排列重新组合,时间有点慢。

后来发现其他人的代码实现比较简单,如下参考。


代码如下:

<span style="font-size:14px;">class Solution {public:    vector<vector<int>> permute(vector<int>& nums) {       /*自己实现         vector<vector<int>> res;        if(nums.size() == 0)            return res;        int n = nums.size();        vector<int> elem(nums);        if(nums.size() == 1){            res.push_back(nums);            return res;        }        if(nums.size() == 2){            res.push_back(nums);            swap(&elem[0],&elem[1]);            res.push_back(elem);            return res;                    }        for(int i = n-1; i >= 0; --i){            vector<vector<int>> temp;            vector<int> ele(nums);            vector<int>::iterator it;            int bg;            swap(&ele[n-1],&ele[i]);            bg = ele[n-1];            it = ele.end();            --it;            ele.erase(it);            temp = permute(ele);            for(int j = 0; j < temp.size(); ++j){                temp[j].push_back(bg);            }            res.insert(res.end(),temp.begin(),temp.end());        }        return res;*/                vector<vector<int>> res;        create(nums,res,0);        return res;            }    void swap(int* a,int* b){        int t = *a;        *a = *b;        *b = t;    }    void create(vector<int>& nums,vector<vector<int>> &res,int n)    {        if(n==nums.size()-1)            res.push_back(nums);        else        {            for(int i=n;i<nums.size();i++)            {                swap(&nums[i],&nums[n]);                create(nums,res,n+1);                swap(&nums[i],&nums[n]);            }        }    }};</span>


0 0
原创粉丝点击