杭電OJ 2032楊輝三角

paopaotangzu發表於2024-03-10

楊輝三角
楊輝三角形這一題型,屬於分治法,如果我們使用遞迴來處理,可以解決但是時間複雜度太高,為\(O(2^n)\),會超時錯誤,所以應該用遞推法,一行一行的把值儲存下來,減少大量的重複計算,這樣時間複雜度為\(O(n)\),還不錯。

當然解題思路,無論是遞迴還是遞推,都是一樣的,總結遞迴公式、及遞迴出口(可能不止一個)。

#include <iostream>
#include <cstdio>

using namespace std;
const int MAXN = 30 + 5;

struct Triangle {
    int arr[MAXN][MAXN];
    int row, col;
};
Triangle answer;

//遞推法求楊輝三角形
void yang_triangle(int n) {
    for(int i = 1; i <= n; ++i) {
        for(int j = 0; j < i; ++j) {
            if(j == 0 || j == i - 1) {
                answer.arr[i-1][j] = 1;
            } else {
                answer.arr[i-1][j] = answer.arr[i-2][j-1] + answer.arr[i-2][j];
            }
        }
    }
}

int main()
{
    int n;
    while(cin >> n) {
        yang_triangle(n);
        //output
        for(int i = 1; i <= n; ++i) {
            for(int j = 0; j < i; ++j) {
                if(j == 0) {
                    cout << answer.arr[i-1][j];
                } else {
                    cout << " " << answer.arr[i-1][j];
                } 
            }
            cout << endl;
        }
        cout << endl;
    }
    return 0;
}

相關文章