剑指offer第二版-57.2.和为s的连续正数序列

本系列导航:剑指offer(第二版)java实现导航帖

面试题57.2:和为s的连续正数序列

题目要求:
输入一个整数s,打印所有和为s的连续正数序列(至少两个)。例如,输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以打印出三个连续序列15,46,7~8。

解题思路:
与上一题类似,依旧使用两个指针small,big,值分别为1,2。如果从small加到big的和等于s,即找到了一组解,然后让big后移,继续求解。如果和小于s,big后移,如果和大于s,small前移。直到small大于s/2停止。

package chapter6;

/**
 * Created with IntelliJ IDEA
 * Author: ryder
 * Date  : 2017/8/17
 * Time  : 15:47
 * Description:和为s的连续正数序列
 **/
public class P282_ContinuousSequenceWithSum {
    public static void findContinuousSequence(int sum){
        if(sum<3)
            return;
        int small = 1,big = 2,middle = sum>>1;
        int curSum = small+big;
        while (small<=middle){
            if(curSum==sum){
                printContinousSequence(small,big);
                big++;
                curSum+=big;
            }
            else if(curSum

运行结果

1 2 3 4 5 
4 5 6 
7 8 

你可能感兴趣的:(剑指offer第二版-57.2.和为s的连续正数序列)