和为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<int[]> res = new  List<int[]>();
        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();
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容