LeetCode829. 連續整數求和

給定一個正整數 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

思路是等差數列
依據等差數列的求和公式:
S = n*a + n(n-1)d/2
在S已知的情況下求使得a爲整數的n的取值的個數,貼上代碼如下:

	int consecutiveNumbersSum(int N) { // 等差數列求和公式是:S = n*a + n(n-1)d/2,此處公差d爲1,此題的思路在於對於n,使得a爲整數的情況
		int ans = 0;
		int number = 0.5 + sqrt(2 * N + 0.25);// 項數的上限 -- 此處因爲 a必定爲正數,所以n(n-1)d < 2S,依據此式取n上限,a = (S-n(n-1)d/2)/n
		for (int i = 1; i < number; i++)
		{
			if ((2 * N - i*(i - 1)) % (2 * i) == 0)
				ans++;
		}
		return ans;
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章