1. 程式人生 > >【劍指offer】和為S的連續正數序列

【劍指offer】和為S的連續正數序列

col ++ log 指針 fin ger bsp style res

題目:小明很喜歡數學,有一天他在做數學作業時,要求計算出9~16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100(至少包括兩個數)。沒多久,他就得到另一組連續正數和為100的序列:18,19,20,21,22。現在把問題交給你,你能不能也很快的找出所有和為S的連續正數序列? Good Luck!

輸出描述:輸出所有和為S的連續正數序列。序列內按照從小至大的順序,序列間按照開始數字從小到大的順序

思路:和為sum,那麽sum/2+sum/2+1肯定是大於sum,因此只要考慮到sum/2就可以。指針i從1開始遍歷,再來一個指針j從i開始遍歷,如果和小於sum,則繼續向後遍歷,反之則停止。

代碼:

import java.util.ArrayList;

public class FindContinuousSequenceClass {
    
    public static void main(String[] args) {
        ArrayList<ArrayList<Integer>> list = FindContinuousSequence(1);
        System.out.println(list);
    }
    
    public static ArrayList<ArrayList<Integer> > FindContinuousSequence(int
sum) { ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>(); ArrayList<Integer> list = new ArrayList<Integer>(); for(int i =1;i < sum/2+1;i++) { int num = 0; int j = i;
while(num < sum) { list.add(j); num += j; j++; } if(num == sum) result.add(new ArrayList<Integer>(list)); list.clear(); } return result; } }

【劍指offer】和為S的連續正數序列