您的位置:首页 > 理论基础 > 数据结构算法

和为S的连续正数序列

2017-11-21 08:41 120 查看
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序

import java.util.ArrayList;
public class Solution {
public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {

ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();

int small = 1;
int big = 2;
int curSum = small+big;
while(small < big && small < (sum+1)/2){
if(curSum == sum){
ArrayList<Integer> list = new ArrayList<Integer>();

for(int i=small;i<=big;i++){
list.add(i);
}
result.add(list);

//更新
curSum -= small;
//区间右移
small ++;
big ++;
curSum += big;
}else if(curSum < sum){ //tmp_sum小,右侧扩展
//区间右侧 右移,包括更大的数字
big ++;
curSum += big; //更新
}else{ //tmp_sum大,左侧紧缩
curSum -= small;
small ++; //左侧紧缩
}
}
return result;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息