--- title: leetcode-he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof date: 2020-04-09 22:14:56 tags: - leetcode categories: leetcode mathjax: true --- ### 面试题57 - II. 和为s的连续正数序列 [题目](https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof/) 又是小学奥数。由等差数列求和公式$\cfrac{(首项 + 末项)×项数}{2}$ 可知,当首项为 1 的时候项数最多,又由于是连续正整数,$n^2 < (1+n)×n < (n+1)^2 $,那最大的 $n$ 就不大于 $\sqrt{2×target} + 1$。 由小到大遍历 $n$,可以求得首项。 ```python import math class Solution: def findContinuousSequence(self, target: int): n = int(math.sqrt(2 * target) + 1) if n < 2: return [] sum_list = [] a = 0 for i in range(2, n+1): a = ((2 * target) / i + 1 - i) / 2 if a and not a % 1: a = int(a) s_ = [] for j in range(0, i): s_.append(a + j) sum_list.append(s_) return sorted(sum_list) # 60 ms 13.7 MB ```