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;
    }
};

 

注意:

如果vector<int> path定义为全局变量,path会保留所有遍历成功的结果,并在原来成功的路径后面添加下一条路径。这显然是错的。

 

 

 

 

要定义成局部变量

 

posted @ 2020-02-22 13:29  靖愁  阅读(95)  评论(0编辑  收藏  举报