1. 题目
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
2. 解题思路
滑动窗口啦
3. 代码
class Solution {
private:
int calc(int i, int j){
return (i + j) * (j - i + 1) / 2;
}
public:
vector<vector<int>> findContinuousSequence(int target) {
int i = 1;
int j = 2;
vector<vector<int>> ans;
while(i != j){ // 当i=j时,总是比terget大
if(calc(i, j) < target){
j++; // 增大序列和
}else if(calc(i, j) > target){
i++; // 减小序列和
}else{
vector<int> temp(j - i + 1);
for(int t = i; t <= j; t++){
temp[t - i] = t;
}
ans.push_back(temp);
j++;
}
}
return ans;
}
};