【追求进步】和为S的连续正数序列

来源:互联网 发布:手机sql注入 编辑:程序博客网 时间:2024/05/01 12:52

本题跟蘑菇街面试出的输入指定和为K的任意两个数字在递增数字中:

参考一下链接:
点击打开链接

题目描述

小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 
输出描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
在线代码:
import java.util.ArrayList;public class Solution {   public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {       ArrayList<ArrayList<Integer>> result=new ArrayList<>();           //边界处理        if(sum<3){            return result;        }            //初始化变量        int small=1;        int big=2;        int mid=(1+sum)/2;        int cursum=small+big;            //small序列增加在mid的时候就停止        while(small<mid){                //如果当前和等于sum,则打印small到big之间的连续序列            if(cursum==sum){                ArrayList<Integer> list=new ArrayList<>();                for(int i=small;i<=big;i++){                    list.add(i);                }                result.add(list);            }                //如果当前和大于sum            while(cursum>sum&&small<mid){                    //当前和去掉最小的small序列                cursum-=small;                    //small序列向前移动                small++;                    //然后遇到相等则打印small到big之间的连续序列                if(cursum==sum){                ArrayList<Integer> list=new ArrayList<>();                for(int i=small;i<=big;i++){                    list.add(i);                }                        //将list2添加进去result中                result.add(list);                 }            }                //否则big一直加            big++;                //当前和一直累加            cursum+=big;        }        return result;    }}


0 0
原创粉丝点击