LeetCoe-c++全排列2(题47)

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

题面

给定一个可包含重复数字的序列,返回所有不重复的全排列。
示例:
输入: [ 1 , 1 , 2 ] [1,1,2]
输出:
[ [ 1 , 1 , 2 ] , [ 1 , 2 , 1 ] , [ 2 , 1 , 1 ] ] [ [1,1,2], [1,2,1], [2,1,1] ]
和题46类似
https://blog.csdn.net/glw0223/article/details/88601043

源码

class Solution{
public:
    vector<vector<int>> permuteUnique(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 = permuteUnique(tmpNums);
        for (vector<int>& permute : permutes)
        {
            for (unsigned int i = 0; i <= permute.size(); ++i)
            {
                vector<int> tmp_permute = permute;
                tmp_permute.insert(tmp_permute.begin() + i, nums[0]);
                out.push_back(tmp_permute);
                if(i<permute.size()&&permute[i]==nums[0]){
                    break;
                }
            }
        }
        return out;
    }   
}; 

测试代码

int main(int argc, const char * argv[]) {
    // insert code here...
   std::cout << "Hello, World!\n";
    Solution solution;    
    std::vector<int> arr={1,2,1};
    std::vector<std::vector<int>> result1=solution.permuteUnique(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]<<" ";
        }
        cout<<endl;
    }
    return 0;
}

猜你喜欢

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