import java.util.ArrayList;
/**
* 和为S的连续正数序列
*
* 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,
* 他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22
*/
public class JZ041SequenceOfContinuousPositiveNumbersWithSumS {
public ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) {
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
if (sum <= 2) {
return list;
}
int start = 1;
int end = 2;
int mid = (1 + sum) >> 1;
int curSum = start + end;
while (start < mid) {
if (curSum == sum) {
list.add(FindContinuousSequenceSun(start, end));
}
while (curSum > sum && start < mid) {
curSum -= start;
start++;
if (curSum == sum) {
list.add(FindContinuousSequenceSun(start, end));
}
}
end++;
curSum += end;
}
return list;
}
private ArrayList<Integer> FindContinuousSequenceSun(int start, int end) {
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = start; i <= end; i++) {
list.add(i);
}
return list;
}
}