本文共 808 字,大约阅读时间需要 2 分钟。
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
本题与类似。
思路:都是利用滑动窗口的思想。
根据题目,为连续正数,所以可以利用连续正整数的求和公式 subSum=(left+right)*(right-left+1)/2;
循环截止条件为左窗口边界到达sum的中间位置,例如题目中sum=100,则left<50,因为左边界为50,下一项为51,肯定大于100了。
import java.util.ArrayList;public static ArrayList> findContinuousSequence(int sum) { ArrayList > lists =new ArrayList >(); int left=1; int right=1; int subSum=0; while(left<(sum+1)/2) { subSum=(left+right)*(right-left+1)/2; if(subSum==sum) { ArrayList list = new ArrayList (); for(int i=left;i<=right;i++) list.add(i); left++; right++; lists.add(list); }else if(subSum
转载地址:http://mhbti.baihongyu.com/