combination sum

class Solution {
    
public:
    void comb(vector<int> &candidates,int pos,vector<vector<int> >& v,int target)
    {
     
        if( target == 0 ){          
            v.push_back(v.back());           
        }
        for( int i=pos; i<candidates.size();++i)
        {
            if(candidates[i] > target )
            {
                return;
            }    
            v.back().push_back(candidates[i]);
            comb( candidates,i,v,target-candidates[i]);
            v.back().pop_back();         
        }
        
        return;
    }
    vector<vector<int> > combinationSum(vector<int> &candidates, int target) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        vector<vector<int> > v;
        if( candidates.empty() ) return v;
        
        sort(candidates.begin(),candidates.end());
        
        v.push_back(vector<int>());
        
        comb(candidates,0,v,target);
        
        if( v.back().size() == 0 ) v.pop_back();
        
        return v;
    }
};

 

posted on 2013-07-05 19:29  jumping_grass  阅读(137)  评论(0)    收藏  举报

导航