跳转至

57.2.和为 s 的连续正数序列 (Easy)*

题目描述*

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

序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。

示例*

输入:target = 15

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

限制*

1 <= target <= 10^5

代码*

滑动窗口。

class Solution {
public:
    vector<vector<int>> findContinuousSequence(int target) {
        int start = 1, end = 2;
        int sum = 3;
        vector<vector<int>> res;
        while(end <= target / 2 + 1) {
            // cout << sum << endl;
            if(sum > target) {
                sum -= start;
                start++;
            }else if(sum < target) {
                end++;
                sum += end;
            }else {
                vector<int> tmp;
                for(int i = start; i <= end; i++) {
                    tmp.push_back(i);
                }
                res.push_back(tmp);
                sum -= start;
                start++, end++;
                sum += end;
            }
        }
        return res;
    }
};

最后更新: July 23, 2022