题意
输入一个非负整数 S,打印出所有和为 S
的连续正数序列(至少含有两个数)。
例如输入 15
,由于 1+2+3+4+5=4+5+6=7+8=15,所以结果打印出 3 个连续序列 1∼5、4∼6 和 7∼8。
分析
用一个滑动窗口扫过去即可。
class Solution {
public:
vector<vector<int> > findContinuousSequence(int sum) {
vector<int> nums;
nums.resize(1001);
for(int i = 0; i <= 1000; i ++)nums[i] = i+1;
vector<vector<int>> ans;
vector<int> tmp;
int window_sum = 0;
for(int i = 0, j = -1; i < 1000; i ++){
if(i)window_sum -= nums[i-1];
while(window_sum < sum && j <=1000){
j ++;
window_sum += nums[j];
}
if(window_sum == sum && j - i + 1 > 1){
for(int k = i; k <= j; k ++)tmp.push_back(nums[k]);
ans.push_back(tmp);
tmp.clear();
}
}
return ans;
}
};