题目描述
方法
1. 平均数+边界条件判断
class Solution:
def findContinuousSequence(self, target: int) -> List[List[int]]:
res = []
for num in range(target//2, 1, -1):
mid = target/num
if mid - num // 2 <= 0:
continue
if num % 2 and int(mid) == mid:
res.append(list(range(int(mid)-num//2, int(mid)+num//2+1)))
elif not (num % 2) and mid - int(mid) == 0.5:
res.append(list(range(int(mid)-num//2 +1, int(mid)+num//2+1)))
return res
2. 求和公式
当从i到j公差为1的等差数列求和为target,有
因此可以得到:
class Solution:
def findContinuousSequence(self, target: int) -> List[List[int]]:
i,j = 1,2
res = []
while i<j:
j = (-1 + (1 + 4 * (2 * target + i * i - i)) ** 0.5) / 2
if i<j and int(j) == j:
res.append(list(range(i,int(j+1))))
i+=1
return res
3. 双指针
class Solution:
def findContinuousSequence(self, target: int) -> List[List[int]]:
i, j = 1, 2
s = 3
res = []
while i < j:
if s == target:
res.append(list(range(i, j + 1)))
s -= i
i += 1
elif s > target:
s -= i
i += 1
elif s < target:
j += 1
s += j
return res