zoukankan      html  css  js  c++  java
  • (待解决,效率低下)47. Permutations II C++回溯法

    思路是在相似题Permutations的基础上,将结果放到set中,利用set容器不会出现重复元素的特性,得到所需结果

    但是利用代码中的/* */部分通过迭代器遍历set将set中的元素放在一个新的vector中时,会出现memory limit exceeded错误(原因??)

    上网查找后发现可以直接通过return vector<vector<int>> (mySet.begin(),mySet.end())得到结果,并且代码通过。

    class Solution {
    public:
        void backTrack(vector<int> nums, set<vector<int>>& mySet, vector<int> res, int k, int m[])
    {
        if(k == nums.size())
        {
            mySet.insert(res);
        }
        else
        {
            for(int i=0;i<nums.size();i++)
            {
                if(!m[i])
                {
                    m[i] = 1;
                    res.push_back(nums.at(i));
                    backTrack(nums,mySet,res,k+1,m);
                    res.pop_back();
                    m[i] = 0;
                }
            }
        }
    }
        vector<vector<int>> permuteUnique(vector<int>& nums) {
            vector<vector<int>> ans;
            vector<int> res;
            set<vector<int>> mySet;
            int m[nums.size()] = {0,};//true为未用过
            backTrack(nums,mySet,res,0,m);
            /*set<vector<int>>::iterator itr = mySet.begin();
            while(itr != mySet.end())
            {
                ans.push_back(*itr);
                for(int i=0; i<(*itr).size();i++)
                {
                    cout << (*itr).at(i) << ' ';
                }
                cout << endl;
                itr++;
            }*/
            return vector<vector<int>> (mySet.begin(),mySet.end());
        }
    };

  • 相关阅读:
    版本控制 version control
    URL URI
    能用上的收藏
    函数式语言简介(functional language)
    h5触摸事件-判断上下滑动
    地理定位
    web存储
    jquerymobile tap事件被触发两次
    关于button的onclientclick事件和onclick事件
    .net 后台给html控件赋值
  • 原文地址:https://www.cnblogs.com/tornado549/p/9990678.html
Copyright © 2011-2022 走看看