题目描述:
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
示例1:
输入:target = 9
输出:[[2,3,4],[4,5]]
示例2:
输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]
解题思路:
使用双指针一前一后,头指针到尾指针的序列是所寻找的序列。分为以下三种情况:
①双指针序列和<target,尾指针向后移,序列和加上一个尾指针数。
②双指针序列和<target,序列和减去一个头指针数,头指针后移。
③双指针序列和=target,将此时序列存下,双指针均后移。
代码部分:
class Solution {
public:
vector<vector<int>> findContinuousSequence(int target) {
vector<vector<int>> rs;
int start=1,end=2,curSum=3;
while(end<target)
{
if(curSum>target)
{
curSum-=start;
start++;
}else if(curSum<target)
{
end++;
curSum+=end;
}else{
vector<int> t;
for(int i=start;i<=end;i++)
t.push_back(i);
rs.push_back(t);
curSum-=start;
start++;
end++;
curSum+=end;
}
}
return rs;
}
};