1. 程式人生 > 其它 >劍指offer之和為S的正整數序列

劍指offer之和為S的正整數序列

技術標籤:八股文日記

題目描述

小明很喜歡數學,有一天他在做數學作業時,要求計算出9~16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100(至少包括兩個數)。沒多久,他就得到另一組連續正數和為100的序列:18,19,20,21,22。現在把問題交給你,你能不能也很快的找出所有和為S的連續正數序列? Good Luck!

返回值描述:

輸出所有和為S的連續正數序列。序列內按照從小至大的順序,序列間按照開始數字從小到大的順序

示例1

輸入

9

返回值

[[2,3,4],[4,5]]
class Solution {
public:
    vector<vector<int> > FindContinuousSequence(int sum) {
        vector<vector<int>> res;
        //滑動視窗左右邊界
        int l=1, r=1;
        int tmp = 0;
        while(l <= sum/2)
        {
            if(tmp < sum)
            {
                tmp += r;
                r++;
            }
            else if(tmp > sum)
            {
                tmp -= l;
                l++;
            }
            else
            {
                vector<int> ans;
                for(int i=l; i<r; i++)
                {
                    ans.push_back(i);
                }
                res.push_back(ans);
                tmp -= l;
                l++;
            }
        }
        return res;
    }
};