正の整数ターゲットを入力し、合計がターゲットとなる連続するすべての正の整数シーケンス (少なくとも 2 つの数値を含む) を出力します。
シーケンス内の数字は小さいものから大きいものへと配置され、最初の数字に従って小さいものから大きなものまで異なるシーケンスが配置されます。
例 1:
输入:target = 9
输出:[[2,3,4],[4,5]]
例 2:
输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]
制限:
1 <= target <= 10^5
答え:
class Solution {
public int[][] findContinuousSequence(int target) {
List<int[]> result = new ArrayList<>();
int p = 1;
int q = 2;
int sum = p+q;
while (p < q) {
// 如果sum = target,将p->q的区间放到arr中
if (sum == target) {
int[] arr = new int[q-p+1];
for (int i=p; i<=q; i++) {
arr[i-p] = i;
}
result.add(arr);
// p 指针左移
sum = sum-p;
p++;
// 如果sum比target小,p指针不动,q++
} else if (sum < target) {
q++;
sum = sum+q;
// 如果sum比target大,p指针->
} else {
sum = sum - p;
p++;
}
}
int[][] resultArr = new int[result.size()][];
for (int i=0;i<result.size();++i) {
resultArr[i] = result.get(i);
}
return resultArr;
}
}