您的位置:首页 > Web前端

《剑指offer》- 输出所有和为S的连续正数序列

2018-01-25 15:23 309 查看
import java.util.ArrayList;
/*
* 输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
* 思想:定义两个指针
*/
public class FindContinuousSequence {
public ArrayList<ArrayList<Integer>> findContinuousSequence(int sum) {
int i = 1;	//头指针
int j = 2;	//尾指针
ArrayList<ArrayList<Integer>> resultList = new ArrayList<ArrayList<Integer>>();

while(i <= sum / 2) {	//头指针移动到一半的位置,结束循环
if(getSum(i, j) == sum) {
resultList.add(getArrayList(i, j));
j ++;	//找到一个符合条件的,尾指针就右移
}

else if(getSum(i, j) < sum) {	//小了,说明长度不够,应该扩展长度,尾指针右移
j ++;
}

else {		//大了,说明长度长了,应该缩小长度,头指针右移
i ++;
}
}

return resultList;
}

public static int getSum(int start, int end) {
int sum = 0;

for(int i = start;i <= end;i ++) {
sum += i;
}

return sum;
}

public static ArrayList<Integer> getArrayList(int start, int end) {
ArrayList<Integer> list = new ArrayList<Integer>();

for(int i = start;i <= end;i ++) {
list.add(i);
}

return list;
}

public static void main(String[] args) {
ArrayList<ArrayList<Integer>> resultList = new FindContinuousSequence().findContinuousSequence(9);

for(ArrayList<Integer> list : resultList) {
for(int i : list) {
System.out.print(i + " ");
}
System.out.println();
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 数组 算法 指针
相关文章推荐