《剑指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(); } } }
相关文章推荐
- 输入一个正数 n,输出所有和为 n 的连续正数序列 [No. 25]
- 30.输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
- 【算法学习-01】 输入一个正数 n,输出所有和为 n 连续正数序列。
- 输入一个正数n,输出所有和为n连续正数序列。
- 写正确程序需要注意的地方:输入一个正数n,输出所有和为n连续正数序列。
- 网易面试题 输入一个正数n,输出所有和为n连续正数序列
- 算法习题51:输入一个正数n,输出所有和为n连续正数序列
- 输出所有和为S的连续正数序列
- 输入一个正数n,输出所有和为n 连续正数序列
- 输入一个正数n,输出所有和为n连续正数序列。
- 输入一个正数n,输出所有和为n连续正数序列。
- 输入一个正数n,输出所有和为n连续正数序列
- 输入一个正数 n,输出所有和为 n 连续正数序列。
- 输入一个正数 n,输出所有和为 n 连续正数序列。 java实现
- C++输出所有和为S的连续正数序列(牛客剑指offer)
- 输入一个正数n,输出所有和为n连续正数序列。
- 输入一个正数 n,输出所有和为n 连续正数序列。
- 输入一个正数n,输出所有和为n连续正数序列。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。
- 输入一个正数n,输出所有和为n连续正数序列。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。
- 输入一个正数n,输出所有和为n 连续正数序列