题目描述
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
使用滑窗方法
import java.util.ArrayList;
public class Solution {
public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> temp ;
int i = 1; // 滑动窗口的左边界
int j = 1; // 滑动窗口的右边界
int s = 0; // 滑动窗口中数字的和
while(i <=sum/2){
if (s < sum) {
// 右边界向右移动
s += j;
j++;
} else if (s > sum) {
// 左边界向右移动
s -= i;
i++;
} else {
// 记录结果
temp = new ArrayList<Integer>();
for (int k = i; k <j; k++) {
temp.add(k);
}
res.add(temp);
// 左边界向右移动
s -= i;
i++;
}
}
return res;
}
}