- 滑动窗口
- 连续数字的和:(left + right) * (right - left + 1) / 2;
- 如果等于目标值,将该组数字放入结果,窗口左端右移;
- 如果小于目标值,窗口右端右移;
- 如果大于目标值,窗口左端右移;
- 返回最终结果。
class Solution {
public:
vector<vector<int> > FindContinuousSequence(int sum) {
vector<vector<int>> result;
int left = 1, right = 2;
while (left < right) {
int tempSum = (left + right) * (right - left + 1) / 2;
if (tempSum == sum) {
vector<int> vec;
for (int i = left; i <= right; i++) {
vec.push_back(i);
}
result.push_back(vec);
left++;
}
else if (tempSum < sum) {
right++;
}
else {
left++;
}
}
return result;
}
};