用数据结构队列打印杨辉三角的代码
时间: 2024-12-19 17:19:12 浏览: 10
在Python中,可以使用队列(deque)来优雅地打印杨辉三角。杨辉三角是一个二项式系数表示的数组,每一行代表一个阶乘数,从左上角到右下角,每个数字是它上面两个数字之和。这里是一个简单的例子:
```python
from collections import deque
def print_pascal_triangle(n):
# 创建一个双端队列存储每一行的元素
triangle = deque()
for i in range(n):
# 添加当前行的空格
triangle.appendleft(" " * (n - i - 1))
# 添加当前行的第一个和最后一个数字
triangle.appendleft(1)
triangle.appendleft(1)
# 使用循环计算并添加剩余的元素
for _ in range(i):
triangle.appendleft(triangle[0] + triangle[1])
triangle.popleft()
print(''.join(triangle))
# 调用函数打印5级的杨辉三角
print_pascal_triangle(5)
```
当你运行这个代码时,会看到5级的杨辉三角逐行打印出来。
相关问题
用java数据结构队列打印杨辉三角的代码
在 Java 中,我们可以使用 ArrayList 或 LinkedList 作为队列来实现杨辉三角的打印。以下是一个使用 ArrayList 的例子:
```java
import java.util.ArrayList;
import java.util.List;
public class YangHuiTriangle {
public static void print(int n) {
List<List<Integer>> triangle = new ArrayList<>();
for (int i = 0; i <= n; i++) {
List<Integer> row = new ArrayList<>();
row.add(1);
if (i > 0) {
for (int j = 1; j < i; j++) {
int num = triangle.get(i - 1).get(j - 1) + triangle.get(i - 1).get(j);
row.add(num);
}
}
triangle.add(row);
}
for (List<Integer> row : triangle) {
for (int num : row) {
System.out.print(num + " ");
}
System.out.println();
}
}
public static void main(String[] args) {
print(5); // 打印前5行杨辉三角
}
}
```
在这个代码中,我们首先创建了一个二维列表 `triangle` 用于存储杨辉三角。然后对于每一行,我们初始化为包含1,接着根据上一行的相邻元素相加来填充当前行。最后,遍历整个三角形,逐行打印每个元素。
数据结构队列实现杨辉三角
杨辉三角是一个数学术语,它是一个矩形表格,其中每个数字都是其上方两个数字之和。在数据结构中,尤其是动态数组或链表的队列实现,我们可以用数组来存储这个三角形,因为数组方便我们按需扩展并且支持高效的插入和删除操作。
以下是用Python实现一个简单的队列来维护杨辉三角的步骤:
```python
class QueueBasedYHT:
def __init__(self):
self.queue = [(0, 1)] # 初始化队列,包含(行号, 序列值)元组
def next_row(self):
new_row = [0] * len(self.queue)
new_row[0], new_row[-1] = self.queue[-1]
while self.queue:
current = self.queue.pop(0)
row, val = current
if row > 1:
left = new_row[row - 1]
right = new_row[row - 2]
new_row[row] = left + right
else:
new_row[row] += val
self.queue.append((len(new_row), new_row[-1])) # 更新队列的最后一项
return new_row[:-1] # 返回新生成的一行,去掉最后一个0
# 使用示例
yht = QueueBasedYHT()
for _ in range(5): # 打印前5行杨辉三角
print(yht.next_row())
```
在这个实现中,我们维护了一个队列,每次从队首取出一行并计算出下一行,然后将新的元素加入队尾。这样可以保证每次操作时间复杂度为O(1),适合构建杨辉三角这样的递推过程。
阅读全文