输入一个正整数 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
A-B可以用数学等差数列公式求和,A-B的范围可以用滑动窗口求—因为连续序列要求必须至少两个数
所以初始化l=1,r=2,限制范围就是 l<r
class Solution {
public:
vector<vector<int>> findContinuousSequence(int target) {
vector<vector<int>>ve;
for(int i=1 ,j=2;i<j;)
{
int sum=(i+j)*(j-i+1)/2;
if(sum==target)
{
vector<int>ve1;
for(int l=i;l<=j;l++)
{
ve1.push_back(l);
}
ve.push_back(ve1);
i++;
}
else if(sum<target)
{
j++;
}
else
{
i++;
}
}
return ve;
}
};