我正在使用级别顺序遍历的概念来生成Pascal Triangle。
这是代码段:
void printPascalTriangle(int n)
{
int line=1,Q[50]={0},f=-1,r=-1,prev,t;
Enqueue(Q,&f,&r,1);
Enqueue(Q,&f,&r,0);
prev=0;
while(line!=n)
{
t = Dequeue(Q,&f,&r);
if( !t )
{
line++;
prev = 0;
Enqueue(Q,&f,&r,1);
if(!isEmpty(&r))
Enqueue(Q,&f,&r,0);
printf("\n");
}
else
{
printf("%d ", t);
Enqueue(Q,&f,&r,prev+t);
prev = t;
}
}
}
完整的代码是here:
此方法的优点是其空间复杂度为O(N),其中N为行数。
还有其他更好的方法吗?
由于您唯一关心的是空间复杂性,并且您正在使用int
(而不是某种可能无界大小的大整数类型),因此您实际上可以通过使用这些实现O(1)的空间复杂性两个事实:
(通过
C
(n,k)我的意思是说,假设行和位置是从0开始编号。) 我认为您想要的是代码,而不是方程式?这是两种JavaScript实现,一种带有阶乘计算,另一种不带阶乘计算。我不确定要选择哪一个: