zoukankan      html  css  js  c++  java
  • Combination Sum II

    与Combination Sum不同的是:

    元素里有重复的,所以最后产生的序列会有重复的,要去重

    元素只能用一次,所以每次要从当前元素的下一元素开始循环

    为了方便处理,可以每次令index的序号为要保存的元素下一序号。

    如果不这么处理,向下面这样处理:

     for(int k=index[n]+1;k<candidates.size();k++)
            {
                index[n+1]=k;
    则起始元素会被忽略。
    class Solution {
        private:
        vector<vector<int>>res;
        int index_count=10000;
    public:
        void findSet(int target,int sum,int index[],int n,vector<int>&candidates)
        {
            if(sum>target)
            return;
            if(sum==target)
            {
                vector<int>result;
                for(int j=1;j<=n;j++)
                result.push_back(candidates[index[j]-1]);
                res.push_back(result);
                return;
            }
            
            for(int k=index[n];k<candidates.size();k++)
            {
                index[n+1]=k+1;
                findSet(target,sum+candidates[k],index,n+1,candidates);
            }
        }
        vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
          sort(candidates.begin(),candidates.end());
          res.clear();
          int *index=new int[index_count];
          memset(index,0,sizeof(int)*index_count);
         findSet(target,0,index,0,candidates);
          delete[] index;
          sort(res.begin(),res.end());
          vector<vector<int>>::iterator it;
          it= unique(res.begin(),res.end());
          res.erase(it,res.end());
          return res;
        }
    };
  • 相关阅读:
    Oracle VM VirtualBox安装centos8
    HTML5 离线缓存manifest
    ES6 Proxy函数和对象的增强
    ES6 Map数据结构
    ES6 Set和WeakSet
    ES6Symbol在对象中的应用
    ==,===,与ES6中is()的区别
    ES6对象操作
    ES6函数和数组补漏
    ES6箭头函数
  • 原文地址:https://www.cnblogs.com/daocaorenblog/p/5277319.html
Copyright © 2011-2022 走看看