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;
        }
    };
  • 相关阅读:
    APP的LOGO设计需求
    App 中使用 Iconfont 的整套方案
    UI流程总结
    sketch制作LOGO(一)---环形光晕
    Sketch插件--Rename It
    Sketch Measure使用教程
    04 流程控制
    03 python语法注释、用户交互、格式化输出、基本数据类型、运算符
    02编程语言及python初识
    第一课
  • 原文地址:https://www.cnblogs.com/daocaorenblog/p/5277319.html
Copyright © 2011-2022 走看看