题目
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
示例 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 {
List<List<Integer>> res;
public int[][] findContinuousSequence(int target) {
res = new ArrayList<>();
for (int i = 1; i < target - 1; i++) recur(target, i, 0, new ArrayList<>());
// 转换为数组返回
int[][] ans = new int[res.size()][];
for (int i = 0; i < res.size(); i++) {
int[] arr = new int[res.get(i).size()];
for (int j = 0; j < res.get(i).size(); j++) arr[j] = res.get(i).get(j);
ans[i] = arr;
}
return ans;
}
private void recur(int target, int curr, int sum, List<Integer> list) {
sum += curr;
if (sum > target) return;
list.add(curr);
if (sum == target) {
// 加入结果
res.add(new ArrayList<>(list));
return;
}
recur(target, curr + 1, sum, list);
}
}