Problem
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^9
Solution
class Solution {
public int consecutiveNumbersSum(int n) {
int ans = 0;
for (int i = 1; i * i <= n; i++) {
if (n % i > 0) {
continue;
}
int j = n / i;
if (i % 2 == 1) {
ans++;
}
if (j != i && j % 2 == 1) {
ans++;
}
}
return ans;
}
}
Explain:
nope.
Complexity:
- Time complexity : O(n).
- Space complexity : O(n).