输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
示例 1:
输入:target = 9
输出:[[2,3,4],[4,5]]
示例 2:
输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]
因为是连续的正整数,因此从头开始遍历,直到目标数的一半(后面的数任意相加大于目标数)。
small初始化为1,big初始化为2,small和big之间的序列{1,2},和为3.接下来让序列包含更多的数字,知道big=4,序列为{1,2,3,4},序列和为10>9,于是把small变成2,找到第一个序列{2,3,4}。重复。
public int[][] findContinuousSequence(int target) {
ArrayList<int[]> res= new ArrayList<>();
for(int i=1;i<=target/2;i++){
int sum=0;
int j=i;
while(sum<target){
sum+=j;
j++;
}
if(sum==target){
int[] sol= new int[j-i];
for(int k=0;k<j-i;k++){
sol[k]=k+i;
}
res.add(sol);
}
}
return res.toArray(new int[res.size()][]);
}