输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
Python
# -*- coding:utf-8 -*-
class Solution:
def FindContinuousSequence(self, tsum):
if tsum < 3:
return []
small = 1
big = 2
middle = (tsum + 1)>>1
curSum = small + big
output = []
while small < middle:
if curSum == tsum:
output.append(range(small, big+1))
big += 1
curSum += big
elif curSum > tsum:
curSum -= small
small += 1
else:
big += 1
curSum += big
return output
Java
import java.util.ArrayList;
public class Solution {
public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
if(sum < 3)
return new ArrayList<ArrayList<Integer>>();
ArrayList<ArrayList<Integer>> lists = new ArrayList<>();
int small = 1;
int big = 2;
int middle = (1+sum) / 2;
int curSum = small + big;
while(small < middle)
{
if(curSum == sum)
{
ArrayList<Integer> list = new ArrayList<>();
for(int i=small,j=big; i<=j; i++)
{
list.add(i);
}
lists.add(list);
big++;
curSum += big;
}
else if(curSum < sum)
{
big++;
curSum+=big;
}
else
{
curSum -= small;
small++;
}
}
return lists;
}
}