和爲s的連續正數序列 II

輸入一個正整數 target ,輸出所有和爲 target 的連續正整數序列(至少含有兩個數)。
序列內的數字由小到大排列,不同序列按照首個數字從小到大排列。
示例 1:
輸入:target = 9
輸出:[[2,3,4],[4,5]]

示例 2:
輸入:target = 15
輸出:[[1,2,3,4,5],[4,5,6],[7,8]]

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

class Solution {
public:
    vector<vector<int>> cseq;
    vector<vector<int>> findContinuousSequence(int target) {
      find(target);
      return cseq; 
    }
   
    void find(int target) {
        int small = 1, big = 2;
        int middle = (1 + target) / 2;//中間數字,
        int sum = small + big;
        while(small < middle){//一直增加small到中間值,因爲要求至少含有兩個數字
            if(sum < target){
                //小於目標值
                big++;//增加序列右邊較大值
                sum += big;//加上新增大值
            }else if (sum == target){
                //打印s和爲target的連續序列
                printfsqnumbers(small, big);
                big++;//新增大值,再查找滿足條件的有序序列
                sum += big;//加上新增大值
            }else{//大於目標值,砍去最小的small數,意味着序列的最小數字值加1
                sum -= small;//減去最小數字
                small++;//序列最小數字值加1
            }
        }
    }

     void printfsqnumbers(int small, int big){
        vector<int> sqSum;
         for(int i = small; i <= big; i++){
             sqSum.push_back(i);
         }
         cseq.push_back(sqSum);
     }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章