题目:
求杨辉三角的前n行数据。
输入格式:
输入n(n<10)值。
输出格式:
输出杨辉三角的前n行数据,每个数据占4列。
输入样例:
5
输出样例:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
分析:
- 初始化一个 n × n 的二维列表 a,所有元素初始值为 1。这个列表用来存储最终的结果。
- 通过两层循环,从 2 到 n,然后从 1 到 i,计算 a[i][j]。这个计算过程使用了动态规划的思想,具体的计算公式是 a[i][j] = a[i-1][j] + a[i-1][j-1]。这个公式表示的是,从第 i 个元素开始,选取 j 个元素的可能组合数,等于从第 i-1 个元素开始,选取 j 个元素的可能组合数加上从第 i-1 个元素开始,选取 j-1 个元素的可能组合数。
- 再通过两层循环,打印出 a[i][j]。打印的时候需要注意的是,每打印完一行的元素后,如果当前打印的元素所在行不是最后一行,那么需要换行。同时,在每一行的开始和结束,都需要添加两个空格以使得输出的矩阵更加整齐。
Python版本:
n = int(input())
a = [[1] * n for _ in range(n)]
for i in range(2, n):
for j in range(1, i):
a[i][j] = a[i-1][j] + a[i-1][j-1]
for i in range(n):
for j in range(i+1):
print(" ", a[i][j], end="")
if j == i and i != n-1:
print()
结果:
总结:
代码的时间复杂度是 O(n^2),空间复杂度也是 O(n^2)。这个算法的时间复杂度和空间复杂度都是比较高的,如果 n 很大,可能会导致运行速度慢或者内存不够用。