一、题目:
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
二、思路和代码:
和上一题剑指 Offer 57. 和为s的两个数字(暴力+双指针)类似。
从i=1,j=2开始,如果i,j之间的和小于target,那么j++,如果>target,跳过,如果等于那么把i-j之间的数放入res1数组,放置结束以后,把整个数组放到最后要返回的数组中,然后清空res1,继续,直到i=j。
class Solution {
public:
vector<vector<int>> findContinuousSequence(int target) {
vector<vector<int>>res;
vector<int>res1;
int i=1,j=2,tempsum;
while(i<j){
tempsum=(i+j)*(j-i+1)/2;
if(tempsum==target){
for(int l=i;l<=j;l++){
res1.push_back(l);
}
res.push_back(res1);
i++;
res1.clear();
}
else if(tempsum>target) i++;
else j++;
}
return res;
}
};
怕什么真理无穷,进一步有进一步的欢喜!