【题目】输出所有和为S的连续正数序列。序列为:1,2,3,4,5,6,7,8.。。。。。。。。。。。。。。。
* 序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
1 package com.exe9.offer; 2 3 /** 4 * 【题目】输出所有和为S的连续正数序列。序列为:1,2,3,4,5,6,7,8.。。。。。。。。。。。。。。。 5 * 序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序 6 * @author WGS 7 * 8 */ 9 import java.util.ArrayList; 10 public class FindTotalContinuousSequence { 11 12 public ArrayList<ArrayList<Integer>> getSequenceEqualS(int s){ 13 14 ArrayList<ArrayList<Integer>> list=new ArrayList<ArrayList<Integer>>(); 15 if(s<3) return list; 16 17 int small=1; 18 int big=2; 19 int mid=(1+s)/2; 20 int sum=small+big; 21 22 while(small<mid){ 23 ArrayList<Integer> numList=new ArrayList<Integer>(); 24 if(sum==s){ 25 /*for(int i=small;i<=big;i++){ 26 numList.add(i); 27 }*/ 28 add(small,big,numList); 29 } 30 while(sum>s && small<mid){ 31 sum-=small; 32 small++; 33 if(sum==s){ 34 /*for(int i=small;i<=big;i++){ 35 numList.add(i); 36 } */ 37 add(small,big,numList); 38 } 39 } 40 //此时sum>s 跳出while循环,进入到下面步骤 41 //sum>s 42 if(numList.size()>0) 43 list.add(numList); 44 big++; 45 sum+=big; 46 47 } 48 49 return list; 50 51 } 52 53 private void add(int small,int big,ArrayList<Integer> numList){ 54 for(int i=small;i<=big;i++){ 55 numList.add(i); 56 } 57 } 58 public static void main(String[] args) { 59 FindTotalContinuousSequence f=new FindTotalContinuousSequence(); 60 ArrayList<ArrayList<Integer>> list=f.getSequenceEqualS(15); 61 for(ArrayList<Integer> l:list){ 62 System.out.println(l); 63 } 64 //System.out.println(); 65 } 66 67 }
时间: 2024-10-06 20:47:23