您的位置:首页 > Web前端

剑指offer 和为s的连续正数序列

2017-04-23 14:46 288 查看
题目:输入一个正数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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息