zoukankan      html  css  js  c++  java
  • 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);
    }
  • 相关阅读:
    唯品会面经
    动态代理两种实现方式
    腾讯运营开发面经
    MySQL一些中重要命令
    金山wps面经
    三七互娱面经
    排序算法之快速排序(Quicksort)解析
    全排列算法分析(原创方法/一般方法/字典序法)
    WinForm如何去掉右边和下边的白边
    Java异常处理机制的秘密
  • 原文地址:https://www.cnblogs.com/qingcheng/p/3808972.html
Copyright © 2011-2022 走看看