劍指offer-和為S的連續整數序列
阿新 • • 發佈:2018-12-16
41.和為S的連續整數序列
題目描述
小明很喜歡數學,有一天他在做數學作業時,要求計算出9~16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100(至少包括兩個數)。沒多久,他就得到另一組連續正數和為100的序列:18,19,20,21,22。現在把問題交給你,你能不能也很快的找出所有和為S的連續正數序列? Good Luck!
解題思路:這道題和leetcode上兩數之和的問題比較相似,但又不完全一樣,由於是連續正數序列,所以我們設定兩個指標,開始時L指向1,R指向2,計算L到R之間的數的和與給定的數相比較,若等於給定的數,則將L到R間所有的數是一個符合要求的連續正數序列,L向右移動一位,若小於給定的數,則把R向右移動一位,若大於給定的數,則把L向右移動一位。
public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) { ArrayList<ArrayList<Integer>> res=new ArrayList<>(); int L=1; int R=2; while(L<R) { if((L+R)*(R-L+1)/2==sum) { ArrayList<Integer> list=new ArrayList<>(); for(int i=L;i<=R;i++) { list.add(i); } res.add(list); L++; } else if((L+R)*(R-L+1)/2>sum) L++; else R++; } return res; }