输入一个正数 S,打印出所有和为 S 的连续正数序列(至少含有两个数)。
例如输入 15,由于 1+2+3+4+5=4+5+6=7+8=15,所以结果打印出 33个连续序列 1∼5、4∼6 和 7∼8。
样例
输入:15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]
解题思路
采用双指针,时间复杂度O(N)
class Solution {
public:
vector<vector<int>> findContinuousSequence(int sum) {
vector<vector<int>> res;
for(int i=1,j=1,s=1;i<sum;i++){
while(s<sum) s+=++j;//j先加1,再加到s
if(s==sum&j-i>0){
vector<int> line;
for(int k=i;k<=j;k++) line.push_back(k);
res.push_back(line);
}
s-=i;
}
return res;
}
};