• [LeetCode] Combination Sum II (递归)


    Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.

    Each number in C may only be used once in the combination.

    Note:

    • All numbers (including target) will be positive integers.
    • Elements in a combination (a1, a2, … , ak) must be in non-descending order. (ie, a1a2 ≤ … ≤ ak).
    • The solution set must not contain duplicate combinations.

    For example, given candidate set 10,1,2,7,6,1,5 and target 8, A solution set is: [1, 7] [1, 2, 5] [2, 6] [1, 1, 6]

    class Solution {
    public:
        vector<int> num;
        int target;
        vector<vector<int> > result;
        vector<vector<int> > combinationSum2(vector<int> &num, int target) {
            this->num = num;
            this->target = target;
            
            if(num.size()==0){
                vector<int> tmp;
                result.push_back(tmp);
                return result;
            }
            
            sort(this->num.begin(),this->num.end());
            for(int i=0;i<num.size();i++){
               vector<int> tmp(1,this->num[i]);
               recursion(i+1,tmp,this->num[i]);
            
            }
            
            return result;
        }
    private:
        void recursion(int start,vector<int> tmp,int sum){
            if(sum == target && find(result.begin(),result.end(),tmp)==result.end()){
                result.push_back(tmp);
                return;
            }                    
            vector<int> tmp0(tmp);
            int sum0 = sum;
            for(int i=start;i<num.size();i++){
                tmp.push_back(num[i]);
                sum += num[i];
                if(sum<target)
                   recursion(i+1,tmp,sum);
                else if(sum == target){
                    if(find(result.begin(),result.end(),tmp)==result.end())
                        result.push_back(tmp);
                }                
                else
                    break;
                tmp = tmp0;
                sum = sum0;
            }    
        }//end func
    };
  • 相关阅读:
    JavaScript DOM 编程艺术(第2版)读书笔记(3)
    JavaScript DOM 编程艺术(第2版)读书笔记(1)
    css杂记
    2020年11月15日
    2020年11月14日
    2020年11月13日
    2020年11月12日
    《代码大全》阅读笔记04
    2020年11月11日
    2020年11月10日
  • 原文地址:https://www.cnblogs.com/Xylophone/p/3933734.html
Copyright © 2020-2023  润新知