剑指offer系列46---和为s的连续正数序列

时间:2023-03-09 20:43:17
剑指offer系列46---和为s的连续正数序列

【题目】输出所有和为S的连续正数序列。序列为:1,2,3,4,5,6,7,8.。。。。。。。。。。。。。。。
* 序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序

 package com.exe9.offer;

 /**
* 【题目】输出所有和为S的连续正数序列。序列为:1,2,3,4,5,6,7,8.。。。。。。。。。。。。。。。
* 序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
* @author WGS
*
*/
import java.util.ArrayList;
public class FindTotalContinuousSequence { public ArrayList<ArrayList<Integer>> getSequenceEqualS(int s){ ArrayList<ArrayList<Integer>> list=new ArrayList<ArrayList<Integer>>();
if(s<3) return list; int small=1;
int big=2;
int mid=(1+s)/2;
int sum=small+big; while(small<mid){
ArrayList<Integer> numList=new ArrayList<Integer>();
if(sum==s){
/*for(int i=small;i<=big;i++){
numList.add(i);
}*/
add(small,big,numList);
}
while(sum>s && small<mid){
sum-=small;
small++;
if(sum==s){
/*for(int i=small;i<=big;i++){
numList.add(i);
} */
add(small,big,numList);
}
}
//此时sum>s 跳出while循环,进入到下面步骤
//sum>s
if(numList.size()>0)
list.add(numList);
big++;
sum+=big; } return list; } private void add(int small,int big,ArrayList<Integer> numList){
for(int i=small;i<=big;i++){
numList.add(i);
}
}
public static void main(String[] args) {
FindTotalContinuousSequence f=new FindTotalContinuousSequence();
ArrayList<ArrayList<Integer>> list=f.getSequenceEqualS(15);
for(ArrayList<Integer> l:list){
System.out.println(l);
}
//System.out.println();
} }