和为s的连续正数序列
原创大约 1 分钟
题目:
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
示例
输入:target = 9
输出:[[2,3,4],[4,5]]
输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]思考:
提示
本题考虑采用滑动窗口
窗口左右边界 i,j,和与 target 相等时记录窗口内结果
然后窗口滑动
和大于 target,左边界向右移
和小于 target,右边界向右移
和等于 target,左边界向右移
题解:
class Solution {
public int[][] findContinuousSequence(int target) {
int i = 1, j = 2, s = 3;
List<int[]> res = new ArrayList<>();
while (i < j){
//相等时记录结果
if (s == target){
int[] tmp = new int[j - i + 1];
for (int k = i; k <= j; k++) {
tmp[k-i] = k;
}
res.add(tmp);
}
//滑动窗口
if (s >= target){
s = s - i;
i++;
}else {
j++;
s = s + j;
}
}
return res.toArray(new int[0][]);
}
}