【Leetcode 每日一题】面试题57 - II. 和为s的连续正数序列

允我心安 提交于 2020-03-07 02:48:02

题目描述

输入一个正整数 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

思路

根据观察,若至少两个连续的整数加和得到Target,那么需要依次遍历的最大值不会超过Target的一半(包括奇数)。所以从1到Target/2开始,对每个i进行i,i+1,i+2...的累加,当总和不再小于Target时,判断。若结果相等,则将这组数字输出到result中;否则i++。

解答

class Solution {
public:
    vector<vector<int>> findContinuousSequence(int target) {
        vector<vector<int>> result(0);
        for(int i=1;i<=target/2;i++)
        {
            int j=i;
            int sum=i;
            while(sum<target)
            {
                j++;
                sum+=j;
            }
            if(sum == target)
            {
                vector<int> temp;
                for(int k=i;k<=j;k++)
                    temp.push_back(k);                
                result.push_back(temp);
            }
        }
         return result;
    }
};

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!