KK's blog

每天积累多一些

0%

LeetCode 829 Consecutive Numbers Sum

LeetCode



Given an integer n, return the number of ways you can write n as the sum of consecutive positive integers.

Example 1:

Input: n = 5
Output: 2
Explanation: 5 = 2 + 3


Example 2:

Input: n = 9
Output: 3
Explanation: 9 = 4 + 5 = 2 + 3 + 4


Example 3:

Input: n = 15
Output: 4
Explanation: 15 = 8 + 7 = 4 + 5 + 6 = 1 + 2 + 3 + 4 + 5


Constraints:

* 1 <= n <= 10<sup>9</sup>

题目大意:

求连续整数的和等于N的个数

解题思路:

只有Fintech考,数学题。思路见注释

解题步骤:

N/A

注意事项:

Python代码:

1
2
3
4
5
6
7
8
# x, x+1, ... , x+k-1
# (x + x+k-1) * k / 2 = 2x+k-1) = n, x = [n - k(k-1)/2]/k
def consecutiveNumbersSum(self, n: int) -> int:
res = 1
for i in range(2, int(math.sqrt(2 * n) + 1)):
if (n - i * (i - 1) / 2) % i == 0:
res += 1
return res

算法分析:

时间复杂度为O(n),空间复杂度O(1)

Free mock interview