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;
}
};