题目描述
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
解析:和为S的连续正整数,所以可以设置一个指针,当该指针遍历到超过S的一半时,循环结束。 这里定义了一个求和函数,其实也可以不定义,直接累加即可。
import java.util.ArrayList;
public class Solution {
int j=0;
public Integer Sum(int a,int b){
int sums=0;
while(a<=b){
sums=sums+a;
a++;
}
return sums;
}
public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
int i=1;
int j=2;
ArrayList<ArrayList<Integer>> result=new ArrayList<ArrayList<Integer>>();
while(i<=sum/2){
ArrayList<Integer> list=new ArrayList<Integer>();
if(Sum(i,j)<sum){
j++;
}
else if(Sum(i,j)>sum){
i++;
}else{
for(int q=i;q<=j;q++){
list.add(q);
}
result.add(list);
i++;
}
}
return result;
}
}