算法题-杨辉三角

杨辉三角是什么?

如图 算法

有一个很重要的特性:每一个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角。即第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

相关文章
相关标签/搜索