LeetCode 连续整数求和

    xiaoxiao2023-09-29  143

    给定一个正整数 N,试求有多少组连续正整数满足所有数字之和为 N?

    示例 1:

    输入: 5 输出: 2 解释: 5 = 5 = 2 + 3,共有两组连续整数([5],[2,3])求和后为 5。

    示例 2:

    输入: 9 输出: 3 解释: 9 = 9 = 4 + 5 = 2 + 3 + 4

    示例 3:

    输入: 15 输出: 4 解释: 15 = 15 = 8 + 7 = 4 + 5 + 6 = 1 + 2 + 3 + 4 + 5

    说明: 1 <= N <= 10 ^ 9 思 路 分 析 : \color{blue}思路分析: 这道题就是让我们求一个等差数列,这个等差数列a,a + 1, a + 2,... b的和(a + b)(b - a + 1) / 2 == N。 即(a + b)(b - a + 1) == 2 * N(其中 b == a + i - 1,i为等差数列的项数)因此我们知道解这个方程即可。

    class Solution { public: int consecutiveNumbersSum(int N) { N *= 2; int resCount = 0; for(int i = sqrt(N); i > 0; --i){//穷举项数 if(N % i == 0){ int b = (N / i + i - 1)/2;//末项 int a = b - N / i + 1;//首项 if((a + b) * (b - a + 1) == N){//检测求和公式 ++resCount; } } } return resCount; } };

    最新回复(0)