題目描述: 給定一個正整數 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
分析:swift
以N=15爲例,app
1個,15;spa
2個,7+8;code
3個,4+5+6;blog
5個,1+2+3+4+5;class
......di
N = x*n + n*(n-1)/2,N爲輸入的正整數,n爲個數,x爲一組數中最小的的數,若x存在且爲正整數,則知足;co
實現代碼以下:let
// 結果返回符合條件的組數 func consecutiveNumbersSum(_ N: Int) -> Int { var sum = 0 for i in 1..<Int.max { let tmp = N - ((i-1)*i)/2 if tmp < i { break } var x = -1 if tmp % i == 0 && tmp / i > 0 { x = tmp / i sum += 1 // 打印符合條件的組 var nums = [Int]() for j in 0..<i { nums.append(x+j) } print("\(i): \(nums)") } if x <= 1 && x != -1 { break } } return sum }