1. 程式人生 > 其它 >劍指offer(57)-II

劍指offer(57)-II

劍指offer(57)-II

劍指 Offer 57 - II. 和為s的連續正數序列

輸入一個正整數 target ,輸出所有和為 target 的連續正整數序列(至少含有兩個數)。

序列內的數字由小到大排列,不同序列按照首個數字從小到大排列。

示例 1:

輸入:target = 9
輸出:[[2,3,4],[4,5]]

示例 2:

輸入: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) {
        vector<vector<int>>ans;
        //滑動視窗
        int l=1;int r=2;int s=3;
        while(l<r){
            //如果和==target 存入結果
            if(s==target){
                vector<int>res;
                for(int i=l;i<=r;i++){
                    res.push_back(i);
                }
                ans.push_back(res);
            }
            //如果和大於等於target 就需要縮短左邊界 讓s變小
           if(s>=target){
               s-=l;//更新s
               l++;
           }else{
               //如果和小於target需要放大右邊界
               r++;
               s+=r;//更新s
           }
        }
        return ans;
    }
};