寻找和为S的连续正数序列

题目描述
    输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1-5,,4-6和7-8.
问题解法
    定义两个指针small=1; big=2;让两个指针指向的数与之间相加,如果比目标值小就将big加1,如果比目标值大,就将small加1;
代码如下

public class FindContinuousSequence {
    public static ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) {
        //定义两个标记
        int small=1; //记录小数开始
        int big=2;  //记录大数结束
        int currentSum=small+big;
        ArrayList<ArrayList<Integer>> result=new ArrayList<ArrayList<Integer>>();
        if (sum<3) return result;
        int middl=(sum+1)/2; //循环结束
        while (small<middl){
            //存的值过大,就减小small的值
            while (small<middl&&currentSum>sum){
                currentSum-=small;
                small++;
            }
            //将结果存入链表中
            if (currentSum==sum){
                ArrayList<Integer> item=new ArrayList<Integer>();
                for (int i=small;i<=big;i++){
                    item.add(i);
                }
                result.add(item);
            }
            big++;
            currentSum+=big;
        }


        return result;

    }

 
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容