题目描述:
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
输入示例:
输入:target = 9
输出:[[2,3,4],[4,5]]
解题思路:
1.暴力解题法:分别以i=1 to i=target/2,为开头,依次便利是否有满足条件的数组(为什么是target/2,因为target/2以后的数相加一定大于target,因此不用再往后),同时,对于每个i开头的,要记录其往后寻找到的长度(即每次放入一个,target就减去他,同时记录次数,直到target=0)
代码:
class Solution {
public int[][] findContinuousSequence(int target) {
List<int[]> arr = new ArrayList<>();
if(target<=1 || target>=Math.pow(10,5)){
return null;
}else{
for(int i=1;i<=target/2;i++){
int count=i;//用count保存i,如果直接用i操作,会改变i的值
int temp=target;
while(temp>0){
temp=temp-count;//count就是每次插入的数
count++;
}
if(temp==0&&count-i>=2){
int[] item=new int[count-i];//起始是i,结束是count-1,故长度是count-1+i+1=count-i
int x=i;
for(int j=0;j<item.length;j++){
item[j]=x;
x++;
}
arr.add(item);
}
}
}
return arr.toArray(new int[0][]);
}
}
来源:CSDN
作者:xx小白
链接:https://blog.csdn.net/qq_44936031/article/details/104694258