如图 算法
有一个很重要的特性:每一个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角。即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,这也是组合数的性质之一。即 C(n+1,i)=C(n,i)+C(n,i-1)。markdown
其余特性能够参考百度百科杨辉三角oop
使用两种方式实现,递归和动态规划post
//递归
int recursiveNode(int i, int j) {
if (i == 0 && j == 0) {
return 1;
}
if (j == -1 || j >i) {
return 0;
}
return recursiveNode(i - 1, j - 1) + recursiveNode(i - 1, j);
}
复制代码
//动态规划
void displayYangHuiTriangle(int n) {
int **a = (int**)malloc(sizeof(int*) *n);
for (int i = 0; i < n; i++) {
int size = i + 1;
a[i] = (int*)malloc(sizeof(int) *size);
a[i][0] = 1;
a[i][size - 1] = 1;
if (i > 0) {
for (int j = 1; j < size - 1; j++) {
a[i][j] = a[i-1][j-1] + a[i-1][j];
}
}
}
for (int i = 0; i < n; i++) {
printf("n = %d |", i);
for (int j = 0; j <= i; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
}
int main(int argc, const char * argv[]) {
// insert code here...
printf("Hello, YangHuiTriangle!\n");
displayYangHuiTriangle(10);
return 0;
}
复制代码
不了解动态规划能够参考这个文档经典中的经典算法:动态规划(详细解释,从入门到实践,逐步讲解)ui
算法题-括号匹配检验spa