和为target的连续正数序列(LeetCode面试题)

题目

输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。

序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。

示例 1:

输入:target = 9
输出:[[2,3,4],[4,5]]
示例 2:

输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]

限制:

1 <= target <= 10^5

解析

  • 使用“滑动列表”形式处理
    *设置一个i和j,开始时若i到j之间的数加起来小于target,则j++,反之,sum减掉i,i++;


    移动过程

代码

public int[][] FindContinuousSequence(int target) {
          List res = new  List();
        int i = 1;
        int j = 1;
        int sum = 0;
        while (i <= target/2)
        {
            if (sum < target) sum += j++;
            else if (sum > target) sum -= i++;
            else
            {
                int[] temp = new int[j-i];
                for (int k = i; k < j; k++)
                {
                    temp[k-i] = k;
                    Console.WriteLine(k);
                }
                res.Add(temp);
                sum -= i++;
                sum += j++;
            }
        }
        return res.ToArray();
    }

你可能感兴趣的:(和为target的连续正数序列(LeetCode面试题))