【劍指offer】和為S的連續正數序列
阿新 • • 發佈:2017-08-10
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(intsum) { 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的連續正數序列