题目:输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。
思想是:先把left初始化为1,right初始化为2,如果从left到right的序列和大于s,我们可以去掉较小的值,也就是增大left的值,如果小于s,可以增大right的值,让这个序列包含更多的数字,因为这个序列至少要有两个数字,我们一直增加到left到(1+s)/2;
import java.util.ArrayList;
public class Solution {
public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
ArrayList<ArrayList<Integer>> list=new ArrayList<ArrayList<Integer>>();
int left=1;int right=2;
if(sum<3)return list;
int curSum=left+right;
while(left<(sum+1)/2){
if(curSum==sum)
{
ArrayList<Integer> ls=new ArrayList<Integer>();
for(int i=left;i<=right;i++)
ls.add(i);
list.add(ls);
}
while(curSum>sum&&left<(sum+1)/2){
curSum-=left;
left++;
if(curSum==sum){
ArrayList<Integer> ls=new ArrayList<Integer>();
for(int i=left;i<=right;i++)
ls.add(i);
list.add(ls);
}
}
right++;
curSum+=right;
}
return list;
}
}