和为S的连续正数序列

 vector<vector<int> > FindContinuousSequence(int sum) {
           vector<vector<int>> res;
        if(sum <3)
            return res ;
        
        int small = 1;
        int big = 2;
        int middle = (1+sum)/2;
        int curSum = small +big;
        vector<int> path;

       
        while(small <middle){
            if(curSum == sum){
                path.clear();
                printfRes(path,small,big);
                res.push_back(path);
            }
            while((curSum > sum) && (small < middle)){
                curSum -= small;
                small++;

                if(curSum == sum){
                    path.clear();
                    printfRes(path,small,big);
                    res.push_back(path);
                }
            }
            big++;
            curSum += big;         
        }     
        return res;
    }
    
    void printfRes(vector<int> &res,int small,int big){
        for(int i = small;i<=big;i++){
            res.push_back(i);
        }
    }

 

posted on 2017-02-27 23:32  123_123  阅读(76)  评论(0编辑  收藏  举报