输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。
例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1~5、4~6和7~8。
样例
输入:15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]
双指针算法解题
class Solution {
public:
vector<vector<int> > findContinuousSequence(int sum) {
vector<int> pro;
vector<int> res;
vector<vector<int>> ans;
if (!sum) return ans;
int l = 0, r = 0,s = 0;;
for (int i = 1; i <= sum/2 + 1; ++i){
pro.push_back(i);
s += i;
if (s == sum) {
ans.push_back(pro);
continue;
}
else if(s < sum){
continue;
}
else if (s > sum){
while (s > sum){
s -= pro[0];
pro.erase(pro.begin());
}
if (s == sum) // 这个可别忘了,因为下一次先是直接将nums[i]插入没判断是不是等于sum
ans.push_back(pro);
}
}
return ans;
}
};