1. 程式人生 > >劍指offer-和為S的連續整數序列

劍指offer-和為S的連續整數序列

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;
    }