输出所有和为S的连续正数序列(至少包含两个数)。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序。
思路:利用穷举法的思想。根据条件“至少包含两个数”,可以确定得到的序列中最大值可达到S/2+1,首先将第一个元素加入结果序列,S=S-i;依次往后找j=i+1,判断S-j的大小,若大于0则加入结果序列;若等于零将结果序列加入返回序列,退出内层循环,i++,重复上述操作;若小于零,退出内层循环继续。注意:每次退出内层循环后将S的值还原。
import java.util.ArrayList;
public class Solution {
public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
ArrayList<ArrayList<Integer>> list_all = new ArrayList<ArrayList<Integer>>();
int number = sum/2+1;
int s = sum;
for(int i=1;i<number;i++){
ArrayList<Integer> a = new ArrayList<>();
a.add(i);
sum = sum-i;
for(int j=i+1;j<=number;j++){
if(sum-j>0){
a.add(j);
sum = sum-j;
}else if(sum-j==0){
a.add(j);
list_all.add(a);
sum = s;
break;
}else{
sum = s;
break;
}
}
}
return list_all;
}
}