• LeetCode OJ-- Combination Sum II **


    https://oj.leetcode.com/problems/combination-sum-ii/

    一列数,每个数只能用一次或者不用,给出和为target的组合。

    递归写的深搜,使用了编程技巧,引用。因为递归在本意上是不需要这个引用的,因为它额外的改了调用参数,所以,又有相应的 pop_back()

    #include <iostream>
    #include <vector>
    #include <string>
    #include <algorithm>
    using namespace std;
    
     class Solution {
    public:
        vector<vector<int> > combinationSum2(vector<int> &num, int target){
            vector<vector<int> > ans;
            if(num.size()==0)
                return ans;
    
            sort(num.begin(),num.end());
            
            if(num[0]>target)
                return ans;
    
            //remove the elements greater than target
            int len = num.size();
            while(len>=1 && num[len-1] > target)
                len--;
            num.resize(len);
    
            vector<int> ansPiece;
            combinationSum(num,ans,target,0,ansPiece);
            
           //remove duplicates
            sort(ans.begin(),ans.end());
            ans.erase(unique(ans.begin(),ans.end()),ans.end());
    
            return ans;
        }
        void combinationSum(vector<int> & num,vector<vector<int> > &ans,int target,int pivot,vector<int> &ansPiece)
        {
            if(target == 0)
            {
                ans.push_back(ansPiece);
                return;
            }
            if( target <0 ||pivot == num.size())
                return;
    
            combinationSum(num,ans,target,pivot+1,ansPiece);
    
            ansPiece.push_back(num[pivot]);
            combinationSum(num,ans,target - num[pivot],pivot+1,ansPiece);
            ansPiece.pop_back();
        }
    };
    int main()
    {
        vector<int> num;
        num.push_back(10);
        num.push_back(1);
        num.push_back(2);
        num.push_back(7);
        num.push_back(6);
        num.push_back(1);
        num.push_back(5);
     
        class Solution mys;
        mys.combinationSum2(num,8);
    }
  • 相关阅读:
    AT2172 Shik and Travel
    bzoj5138 [Usaco2017 Dec]Push a Box
    bzoj3545 [ONTAK2010]Peaks、bzoj3551 [ONTAK2010]Peaks加强版
    bzoj5183 [Baltic2016]Park
    bzoj4423 [AMPPZ2013]Bytehattan
    bzoj2125 最短路
    斐波那契数列小结
    记一场模拟赛
    洛谷2387 BZOJ3669魔法森林题解
    COGS-2638 区间与,异或,询问max
  • 原文地址:https://www.cnblogs.com/qingcheng/p/3808972.html
Copyright © 2020-2023  润新知