• 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;
        }
    };
  • 相关阅读:
    API之绘图函数
    DotNetCharting
    Rule engine
    股票
    PHP
    获取Excel.dll
    Excel develop
    几个不错的开源的.net界面控件[转贴]
    关于EXCEL文件双击打不开的问题
    Regular expression
  • 原文地址:https://www.cnblogs.com/daocaorenblog/p/5277319.html
Copyright © 2020-2023  润新知