剑指offer第四十一题。
题目描述
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
输出描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
解题思路
可以采取类似于窗口滑动的思想,慢慢找。
我的答案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 import java.util.ArrayList;public class Solution { public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) { ArrayList<ArrayList<Integer> > result = new ArrayList<>(); int plow = 1 ,phigh = 2 ; while (phigh > plow){ int cur = (phigh + plow) * (phigh - plow + 1 ) / 2 ; if (cur == sum){ ArrayList<Integer> list = new ArrayList<>(); for (int i=plow;i<=phigh;i++){ list.add(i); } result.add(list); plow++; }else if (cur < sum){ phigh++; }else { plow++; } } return result; } }