leetcode刷题 总结 记录 备忘 46

leetcode46

Permutations

 

Given a collection of 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].

这个题目自己想了个想法,感觉还可以,将参数的数组遍历,把每个元素调用一次自己写的一个函数,接受一个int和一个二维数组,当第一次传的时候,二维数组为空,直接将这个int数据当作一个一位数组放进二维数组中,然后返回这个二维数组,以便后面调用。之后调用的时候,由于不是空的二维数组了,所以需要执行新的操作,遍历二维数组中的每一个一位数组,然后再遍历每个一位数组,在每个位置上插入传进来的int参数,结束后还要在尾部再插入一次,得到新的二维数组返回,在主调函数中完成遍历即可,还是比较简单的,具体细节请看代码。
class Solution {
public:
    vector<vector<int> > func(int n, vector<vector<int> > p)
    {
        if (p.size() == 0)
        {
            vector<int> temp;
            temp.push_back(n);
            p.push_back(temp);
            return p;
        }
        vector<vector<int> > pt;
        for (vector<vector<int> >::iterator it = p.begin(); it != p.end(); ++it)
        {
            for (int i = 0; i < (*it).size(); ++i)
            {
                 vector<int> temp = *it;
                 temp.insert(temp.begin() + i, n);
                 pt.push_back(temp);
            }
            vector<int> temp = *it;
            temp.insert(temp.end(), n);
            pt.push_back(temp);
        }
        return pt;
    }
    vector<vector<int>> permute(vector<int>& nums) {
        vector<vector<int> > p;
        for (vector<int>::iterator it = nums.begin(); it != nums.end(); ++it)
        {
            p = func(*it, p);
        }
        
        
        return p;
    }
};

你可能感兴趣的:(leetcode刷题 总结 记录 备忘 46)