829. Consecutive Numbers Sum

829. Consecutive Numbers Sum

這個題目我覺得不用太糾結於最佳解,這個偏向數學題目,但是我覺的是很好的面試題目

首先第一的絕對是不能先去想要怎麼拆解數字,我是先停下來觀察了一下什麼是連續正整數相加。像是:

  • 連續兩個正整數相加:n + (n + 1) = 2 * n + 1
  • 連續三個正整數相加:n + (n + 1) + (n + 2) = 3 * n + 3
  • 連續四個正整數相加:n + (n + 1) + (n + 2) + (n + 3) = 4 * n + 6
  • ...
  • 連續 k 個整數相加 = k * n + SUM(1:k-1)
class Solution:
    def consecutiveNumbersSum(self, n: int) -> int:
        res = 1
        x = 2
        y = 1
        
        while x * 1 + y <= n:
            k = 1
            while x * k + y <= n:
                if x * k + y == n:
                    res += 1
                k += 1
            y += x
            x += 1
        return res