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

    The only difference with version I is: one number can only be used once:

    class Solution {
    public:
        vector<vector<int> > ret;
        struct Rec
        {
            Rec() : sum(0) {}
            int sum;
            vector<int> v;
        };
        void go(vector<int> cands, int level, struct Rec currRec, int target)
        {
            if(currRec.sum == target)
            {
                ret.push_back(currRec.v);
                return;
            }
    
            int desire = target - currRec.sum;
            
            int last = std::numeric_limits<int>::max();
            for(int i = 0; i < cands.size(); i ++)
            {
                int cand = cands[i];
                if(cand <= desire && cand != last)
                {
                    if(!currRec.v.empty())
                    {
                        if(cand < currRec.v[currRec.v.size() - 1]) continue;
                    }
                    Rec newRec = currRec;
                    newRec.sum += cand;
                    newRec.v.push_back(cand);
                    vector<int> newCands = cands;
                    newCands.erase(std::find(newCands.begin(), newCands.end(), cand));                
                    go(newCands, level + 1, newRec, target);    
                    last = cand;
                }
            }
        }
        vector<vector<int> > combinationSum2(vector<int> &candidates, int target) {
            if(candidates.empty()) return ret;
            std::sort(candidates.begin(), candidates.end());   
            go(candidates, 0, Rec(), target);
            return ret;
        }
    };
    View Code
  • 相关阅读:
    rpm 命令详解
    自动配置原理
    ssm框架整合
    单个库创建用户和权限
    Mysql5.7安装过程
    Eclipse和JDK版本以及位数对应关系
    DHCP服务器
    常用Dos命令
    八、Linux上常用网络操作
    数据库分区表(转)
  • 原文地址:https://www.cnblogs.com/tonix/p/3879828.html
Copyright © 2011-2022 走看看