剑指 Offer 57 - II. 和为s的连续正数序列

题目

输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。

序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。

示例1:

1
2
输入:target = 9
输出:[[2,3,4],[4,5]]

示例2:

1
2
输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]

提示:

  • 1 <= target <= 10^5

解法

解法一:

JAVA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public int[][] findContinuousSequence(int target) {
List<int[]> vec = new ArrayList<>();
for (int l = 1, r = 2; l < r;) {
int sum = (l + r) * (r - l + 1) / 2;
if (sum == target) {
int[] res = new int[r - l + 1];
for (int i = l; i <= r; ++i) {
res[i - l] = i;
}
vec.add(res);
l++;
} else if (sum < target) {
r++;
} else {
l++;
}
}
return vec.toArray(new int[vec.size()][]);
}
0%