剑指offer64.求1+2+...+n
发布人:shili8
发布时间:2024-11-08 22:25
阅读次数:0
**剑指Offer64: 求1+2+...+n**
### 题目描述求1到n的和,要求时间复杂度为O(n)。
### 解决方案#### 方法一:直接计算最简单的方法就是直接计算1到n的和。这种方法的时间复杂度是O(n),因为我们需要遍历从1到n的所有数字。
def sum_to_n(n): """ 直接计算1到n的和。 Args: n (int): 需要求和的数字。 Returns: int:1到n的和。 """ return n * (n +1) //2
#### 方法二:使用公式我们可以使用以下公式来计算1到n的和:
1+2+...+n = n*(n+1)/2这种方法也是时间复杂度为O(1),因为我们只需要进行常数数量的运算。
def sum_to_n(n): """ 使用公式计算1到n的和。 Args: n (int): 需要求和的数字。 Returns: int:1到n的和。 """ return n * (n +1) //2
#### 方法三:使用动态规划我们可以使用动态规划来计算1到n的和。这种方法的时间复杂度也是O(n),因为我们需要遍历从1到n的所有数字。
def sum_to_n(n): """ 使用动态规划计算1到n的和。 Args: n (int): 需要求和的数字。 Returns: int:1到n的和。 """ dp = [0] * (n +1) for i in range(1, n +1): dp[i] = dp[i -1] + i return dp[n]
### 测试我们可以使用以下测试用例来测试上述方法:
import unittestclass TestSumToN(unittest.TestCase): def test_sum_to_n(self): self.assertEqual(sum_to_n(5),15) self.assertEqual(sum_to_n(10),55) self.assertEqual(sum_to_n(20),210) if __name__ == '__main__': unittest.main()
### 总结本题目要求求1到n的和,要求时间复杂度为O(n)。我们提供了三种方法来解决这个问题:直接计算、使用公式和使用动态规划。所有方法的时间复杂度都是O(n),但使用公式的方法是最简单也是最有效的方法。