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