给定n个整数和一个整数C,问n个数中那几个数的和等于C。

void function(vector<int> vecS,vector<int> vecD,vector< vector<int> > & vecGroup,int iSum)
{
    for(vector<int>::iterator itr = vecS.begin(); itr != vecS.end(); ++itr)
    {
        if(iSum - *itr == 0)
        {
            vecD.push_back(*itr);

            // 去掉重复组合 ----------------
            vector<int> vecTemp(vecD.begin(),vecD.end());
            sort(vecTemp.begin(),vecTemp.end());
        
            vector< vector<int> >::iterator iter = find(vecGroup.begin(),vecGroup.end(),vecTemp);
            if(iter == vecGroup.end())
            {
                vecGroup.push_back(vecTemp);
            }
            // 去掉重复组合 ----------------

            vecD.pop_back();
        }
        else
        {
            vecD.push_back(*itr);

            vector<int> vecTemp(vecS.begin(),vecS.end());
            vector<int>::iterator it = find(vecTemp.begin(),vecTemp.end(),*itr);
            vecTemp.erase(it);
            function(vecTemp,vecD,vecGroup,iSum - *itr);

            vecD.pop_back();
        }
    }
}

但是效率实在是太低了。。。。

 

你可能感兴趣的:(给定n个整数和一个整数C,问n个数中那几个数的和等于C。)