当前位置:实例文章 » 其他实例» [文章]剑指offer64.求1+2+...+n

剑指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),但使用公式的方法是最简单也是最有效的方法。

相关标签:算法
其他信息

其他资源

Top