原题链接
就是使用前缀和 + 滑动窗口 class Solution { public: vector<vector<int> > FindContinuousSequence(int sum) { vector<int> nums(sum, 0); vector<vector<int>> ans; for (int i = 1; i < sum; i++) { nums[i] = nums[i-1] + i; } for (int num: nums) { cout << num << endl; } 这里一定是从0开始,因为使用nums[end] - nums[start],其实真正的范围是【start+1,end】如果是1的话,那么其范围就是从2开始的 int start = 0; for (int end = 1; end < sum; end++) { //先缩小边界 while (nums[end] - nums[start] > sum) { start++; } if (nums[end] - nums[start] == sum) { vector<int> tmp; for (int i = start+1; i <= end; i++) { tmp.push_back(i); } ans.push_back(tmp); } } return ans; } };