[剑指offer]求字符的所有组合

来源:互联网 发布:java中贪心算法 编辑:程序博客网 时间:2024/06/08 01:01

这道题实在剑指offer上的扩展题(面试题28),思路很简单,自己实现了下,练习一下对vector的使用。

代码如下:

#include <iostream>#include <vector>using namespace std;void combinationAllSubSub(std::vector<int> inputData, int number, int  numberth,    std::vector<int> &oneReturnData, std::vector<std::vector<int> > &returnData){    //剪枝:排除不可能事件    if(inputData.size() - numberth  + oneReturnData.size() < number)        return;    if(number == oneReturnData.size()){ //找到了长度为number的combination        //如果有重复数字,则需要在此检测returnData是否存在oneReturnData        returnData.push_back(oneReturnData);        return;    }    // add this node to combination    oneReturnData.push_back(inputData[numberth]);    combinationAllSubSub(inputData, number, numberth+1, oneReturnData, returnData);    oneReturnData.pop_back();    // do not add this node to combination    combinationAllSubSub(inputData, number, numberth+1, oneReturnData, returnData);}//求长度为number的组合std::vector<std::vector<int> > combinationAllSub(std::vector<int> inputData, int number){    std::vector<int> oneReturnData;    std::vector<std::vector<int> > returnData;    combinationAllSubSub(inputData, number, 0, oneReturnData, returnData);    return returnData;}//求所有的组合std::vector<std::vector<int> > combinationAll(std::vector<int> inputData){    std::vector<std::vector<int> > returnData;    for(int i = 1;i <= inputData.size(); ++i){        std::vector<std::vector<int> > tempReturnData = combinationAllSub(inputData, i);        returnData.insert(returnData.end(), tempReturnData.begin(), tempReturnData.end());    }    return returnData;}void display(std::vector<std::vector<int> > resultData){    for(int i = 0;i < resultData.size(); ++i){        std::vector<int> temp = resultData[i];        for(int j = 0; j < temp.size(); ++j)            cout << temp[j] << " ";        cout << endl;    }}int main(){    int data[] = {1,1,1};    std::vector<int> inputData(data, data+sizeof(data)/sizeof(int));    std::vector<std::vector<int> > resultData = combinationAll(inputData);    cout << "size:" << resultData.size() << endl;    display(resultData);    return 0;}


0 0
原创粉丝点击