数据结构队列实现杨辉三角java
时间: 2024-12-19 15:19:28 浏览: 22
在Java中,我们可以使用数组来实现杨辉三角。杨辉三角是一个数学术题,其中每个数字等于其上方两个数字相加。队列在这里不是必需的数据结构,因为杨辉三角通常是通过递归或动态规划来构建的,而不是通过先进先出(FIFO)操作。不过,如果你需要存储中间步骤或优化空间复杂度,可以考虑使用队列。
下面是一个简单的Java实现,它使用二维数组并利用队列来存储行的索引,以便在计算过程中保持空间效率:
```java
import java.util.LinkedList;
import java.util.Queue;
public class YangHuiTriangle {
public int[][] generate(int n) {
if (n <= 0) return new int[0][0];
Queue<Integer> queue = new LinkedList<>();
int[] row = new int[n];
row[0] = 1; // 初始化第一行
for (int i = 1; i < n; ++i) {
queue.offer(i - 1); // 将前一行的索引入队
for (int j = 0; j <= i; ++j) {
if (j == 0 || j == i) {
row[j] = 1; // 对角线元素值为1
} else {
row[j] = row[j - 1] + row[j]; // 其他位置的值等于上一行对应位置之和
}
}
while (!queue.isEmpty()) { // 移除已处理的行
row = nextRow(queue.poll(), row);
}
}
return row;
}
private int[] nextRow(int prevRowIndex, int[] currentRow) {
int[] newRow = new int[currentRow.length + 1];
newRow[prevRowIndex] = currentRow[prevRowIndex];
System.arraycopy(currentRow, 0, newRow, prevRowIndex + 1, currentRow.length - prevRowIndex);
newRow[newRow.length - 1] = 1; // 新行最后一个元素为1
return newRow;
}
public static void main(String[] args) {
YangHuiTriangle yht = new YangHuiTriangle();
int[][] result = yht.generate(5);
for (int[] row : result) {
for (int num : row) {
System.out.print(num + " ");
}
System.out.println();
}
}
}
```
在这个例子中,`generate`函数构建了指定大小的杨辉三角,`nextRow`用于生成新的行。在主函数中展示了前五行的结果。
阅读全文