LeetCoe-c++全排列(题46)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/glw0223/article/details/88601043

题面

给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [ 1 , 2 , 3 ] [1,2,3]
输出:
[ [ 1 , 2 , 3 ] , [ 1 , 3 , 2 ] , [ 2 , 1 , 3 ] , [ 2 , 3 , 1 ] , [ 3 , 1 , 2 ] , [ 3 , 2 , 1 ] ] [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]

源码

关键点:

  • 递归思想:判断退出条件
  • vector的insert方法的使用
class Solution {
public:
    vector<vector<int>> permute(vector<int>& nums) {
        if (nums.size() <= 1){
            return vector<vector<int>>{nums};
        }
        vector<vector<int>> out;
        vector<int> tmpNums = vector<int>(nums.begin() + 1, nums.end());
        vector<vector<int>> permutes = permute(tmpNums);
        for (vector<int>& p : permutes)
        {
            for (unsigned int i = 0; i <= p.size(); ++i)
            {
                vector<int> tmp_permute = p;
                tmp_permute.insert(tmp_permute.begin() + i, nums[0]);
                out.push_back(tmp_permute);
            }
        }
        return out;
    }
};

测试代码

    Solution solution;    
    std::vector<int> arr={1,2,3};
    std::vector<std::vector<int>> result1=solution.permute(arr);
    cout<<"-----"<<endl;
    for (int i=0;i<result1.size();i++){
        std::vector<int> temp=result1[i];
        for(int j=0;j<temp.size();j++){
            cout<<temp[j]<<endl;
        }
        cout<<"-----"<<endl;
    }

猜你喜欢

转载自blog.csdn.net/glw0223/article/details/88601043