输入一个正整数 target
,输出所有和为 target
的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
输入:target = 9 输出:[[2,3,4],[4,5]]
滑动窗口(双指针):i指向左边界,j指向右边界。用等差数列求和公式求边界内总和,和target对比,比target大就左边界进一,比target小就右边界进1。直到左边界超过中点。
class Solution {
public:
vector<vector<int>> findContinuousSequence(int target) {
int i=1,j=2;
vector<vector<int>>res;
while(i<=target/2){
int total=(i+j)*(j-i+1)/2;//求和
if(total<target)j++;//右边界
else if(total>target)i++;//左边界
else{
vector<int>tmp;//相等
for(int x=i;x<=j;x++)tmp.push_back(x);
res.push_back(tmp);
i++,j++;
}
}
return res;
}
};