题目描述
输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1-5,,4-6和7-8.
问题解法
定义两个指针small=1; big=2;让两个指针指向的数与之间相加,如果比目标值小就将big加1,如果比目标值大,就将small加1;
代码如下
public class FindContinuousSequence {
public static ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) {
//定义两个标记
int small=1; //记录小数开始
int big=2; //记录大数结束
int currentSum=small+big;
ArrayList<ArrayList<Integer>> result=new ArrayList<ArrayList<Integer>>();
if (sum<3) return result;
int middl=(sum+1)/2; //循环结束
while (small<middl){
//存的值过大,就减小small的值
while (small<middl&¤tSum>sum){
currentSum-=small;
small++;
}
//将结果存入链表中
if (currentSum==sum){
ArrayList<Integer> item=new ArrayList<Integer>();
for (int i=small;i<=big;i++){
item.add(i);
}
result.add(item);
}
big++;
currentSum+=big;
}
return result;
}
}