算法題-楊輝三角

楊輝三角是什麼?

如圖 算法

有一個很重要的特性:每一個數字等於上一行的左右兩個數字之和。可用此性質寫出整個楊輝三角。即第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

相關文章
相關標籤/搜索