双指针

【剑指 offer】和为S的连续正序列。(双指针)

2019-05-08  本文已影响0人  邓泽军_3679

1、题目描述

输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。

例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1~5、4~6和7~8。

样例

输入:15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]

2、问题描述:

3、问题关键:

4、C++代码:

class Solution {
public:
    vector<vector<int> > findContinuousSequence(int sum) {
        vector<vector<int>> res;
        vector<int> path;
        for (int i = 1, j = 2; j < sum && i < j; j) {
            int a = (i + j) * (j - i + 1) / 2;//区间内的和。
            if (a == sum) {
                int k = i;
                while(k <= j) path.push_back(k ++);//将区间加入结果。
                res.push_back(path);
                path.clear();
                i ++, j ++;
            }
            else if (a < sum) j ++;
            else i ++;
        }
        return res;
    }
};
上一篇 下一篇

猜你喜欢

热点阅读