输出所有和为S的连续正数序列,例如:连续正数和为100的序列:18,19,20,21,22。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
import java.util.ArrayList;
public class Test41 {
public ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) {
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
if (sum < 3) {
return list;
}
int start = 1;
int end = 2;
int mid = (sum + 1) >> 1;
while (start < mid) {
int s = sumAll(start, end);
if (s == sum) {
list.add(sequence(start, end));
start++;
} else if (s < sum) {
end++;
} else {
start++;
}
}
return list;
}
public int sumAll(int start, int end) {
int sum = 0;
for (int i = start; i <= end; i++) {
sum += i;
}
return sum;
}
public ArrayList<Integer> sequence(int start, int end) {
ArrayList<Integer> list = new ArrayList<>();
for (int i = start; i <= end; i++) {
list.add(i);
}
return list;
}
}