题目
输入一个正整数 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();
}