📜  求第N个居中的三边形数字的总和(1)

📅  最后修改于: 2023-12-03 14:55:59.855000             🧑  作者: Mango

求第N个居中的三边形数字的总和

在数学中,三角形数字是一系列自然数的和,每一项为自然数的行数,从上到下逐行递增。而居中的三边形数字是指位于每行的中央位置的数字,这些数字构成了一个新的数列。

例如,下面是前5行的三角形数字和居中的三边形数字:

1
1  2
2  3  4
4  5  6  7
7  8  9  10 11

1
2
3
5
8

其中,第5个居中的三边形数字是8。

现在,我们需要编写一个函数,输入一个整数N,返回前N行的居中的三边形数字的总和。下面是函数的详细要求:

函数签名
def triangle_numbers(n:int) -> int:
    pass
参数说明
  • n:输入的整数N,表示计算的行数,N > 0。
返回值说明
  • 返回前N行的居中的三边形数字的总和。
示例
assert triangle_numbers(5) == 18
实现思路

我们可以先定义一个嵌套的for循环,逐行计算三角形数字,并在计算过程中累加每行的中央位置的数字。下面是函数的实现代码:

def triangle_numbers(n:int) -> int:
    total_sum = 0
    current_num = 1
    for i in range(1, n+1):
        row_sum = 0
        for j in range(1, i+1):
            row_sum += current_num
            current_num += 1
        total_sum += row_sum - (row_sum//2)
    return total_sum
复杂度分析
  • 时间复杂度:$O(n^2)$,需要两层嵌套的for循环。
  • 空间复杂度:$O(1)$,只需要几个变量来保存统计结果。