数组实现
void yanghui_triangle(int n)
{
vector<vector<int>> arr(n, vector<int>(n));
//数组赋值
for (int i = 0; i < n; i++)
{
arr[i][0] = 1;
arr[i][i] = 1;
}
for (int i = 2; i < n; i++)
{
for (int j = 1; j < i; j++)
{
arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j <= i; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
队列实现
队列法实现的原理,其实就是在输出上一行各系数的时候,其实已经将下一行预先计算好,之后根据队列先进先出的特性,在下一次输出即可。
void yanghui_triangle_queue(int n)
{
queue<int> q;
q.push(1);
for (int i = 0; i < n; i++)
{
int last = 0;
q.push(0);
for (int j = 0; j < i + 2; j++)
{
int t = q.front();//取出队列头部元素
q.pop();
int tmp = last + t;//计算下一行元素
q.push(tmp);
last = t;//保存上一次的元素
if (j != i + 1) //因为每次加入0,多计算一次,无需打印0
printf("%d ", t);
}
printf("\n");
}
}