76. 和为S的连续正数序列

https://www.acwing.com/solution/acwing/content/2670/

代码

class Solution {
public:
    vector<vector<int> > findContinuousSequence(int sum) {
        vector<vector<int>> res;
        for (int i = 1, j = 1, s = 1; i <= sum; i ++ )//连续正数,从1开始
        {
            //只有当s == sum,跳出while
            while (s < sum) j ++, s += j;
            /*如果当前i到j的和是否等于sum*/
            if (s == sum && j - i+1 > 1)//连续正数序列(至少含有两个数),所以区间长度为j-i+1,应该大于1
            {
                vector<int> line;
                for (int k = i; k <= j; k ++ ) line.push_back(k);
                res.push_back(line);
            }
            //s == sum后,计算下一组和为sum的连续正数序列。i向后移动一位,
            //即此时s=(i+1)到j的和。
            s -= i;
        }
        return res;
    }
};

猜你喜欢

转载自www.cnblogs.com/make-big-money/p/12345096.html