• 滑动窗口
  • 连续数字的和:(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;
    }
};