题目:输入一个整数S,打印出所有和为s 的连续整数序列(至少含有两个数);
例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以打印出3个连续序列1~5,4~6和7~8。
思路:类似于和为S的两个数字的结题思路;
可以设置两个指针,samll和big,初始时small指向1,big指向2;
和(curSum)为从small到big的所有数字的和;
如果和等于目标值,将small-big的所有值添加到队列中;并且将big++,并将和也加上big
如果和小于目标值,将big++,并将和加上big;
如果和大于目标值,将small--,并将和减去small;
代码:
import java.util.ArrayList;
public class Solution {
public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
ArrayList<ArrayList<Integer>> lists=new ArrayList<ArrayList<Integer>>();
if(sum<3){
return lists;
}
int small=1;
int big=2;
int mid=(1+sum)/2;
int curSum=small+big;
while(small<mid&&small<big){
if(curSum==sum){
ArrayList<Integer> list=new ArrayList<Integer>();
for(int i=small;i<=big;i++){
list.add(i);
}
lists.add(list);
big++;
curSum+=big;
}
if(curSum>sum){
curSum-=small;
small++;
}else{
big++;
curSum+=big;
}
}
return lists;
}
}