和为s的连续正数序列
题目:
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
示例 1:
输入:target = 9
输出:[[2,3,4],[4,5]]
示例 2:
输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]
解题思路: 运用双指针, 当序列和大于target时 需要减小序列即左指针右移, 当小于等于target时则需要右移右指针
class Solution {
public int[][] findContinuousSequence(int target) {
int i = 1, j = 2, s = 3;
if(target == 1) {
return new int[][]{{1}};
}
if(target == 2) {
return new int[][]{{2}};
}
List<int[]> ans = new ArrayList();
while(i < j) {
if(s == target) {
int[] arr = new int[j - i + 1];
int cur = 0;
for(int k = i; k <= j; k++) {
arr[cur++] = k;
}
ans.add(arr);
}
if(s > target) {
s -= i;
i++;
} else {
j++;
s += j;
}
}
return ans.toArray(new int[0][]);
}
}