输出描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序。
解题思路:
设置small 和 big 前后两个指针,累加small->big之间和,是否为给定和。
若是,则输出;
若小于,则big后移,big++; cursum += big;
若大于,则small后移,cursum -= small;small++;
循环结束条件:small <= sum/2 (因为至少两个数,确定一个区间)
实现代码:
class Solution {
public:
vector<vector<int> > FindContinuousSequence(int sum) {
vector<vector<int>> result;
vector<int> ans;
int small =1;
int big = 2;
int mid = (sum+1)/2;
int cursum = small +big;
while(small < mid)
{
if(cursum == sum)
{
for(int i=small; i<= big; i++)
ans.push_back(i);
result.push_back(ans);
ans.clear();
vector<int>(ans).swap(ans);
big++;
cursum += big;
}
else if(cursum < sum)
{
big++;
cursum += big;
}
else
{
cursum -= small;
small++;
}
}
return result;
}
};