和为s的连续数组(Java)
题目:
//输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
代码:
import java.util.ArrayList;
/**
* @desc 找出和为s的连续序列
* @author zhaoliang
* @date 20200418
*/
public class Main57_ {
//输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
public ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) {
ArrayList<ArrayList<Integer>> ans = new ArrayList<>();
int l = 1;
int r = 2;
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
//终止条件,至少两个数
while (l < (sum + 1) / 2){
int tempSum = cul(l,r);
while (tempSum > sum){
tempSum -= l;
l++;
list.remove(0);
}
if (tempSum == sum){
ans.add(new ArrayList<>(list));
l++;
list.remove(0);
}
r++;
list.add(r);
}
return ans;
}
private int cul(int l, int r) {
return (l + r ) * (r - l + 1) / 2;
}
}