119 Pascal's Triangle II

本文介绍了解决杨辉三角问题的两种方法:一种是通过模拟杨辉三角的特性,利用数组进行逐层更新;另一种是利用二项式展开的原理进行计算。第一种方法的时间复杂度为O(n^2),空间复杂度为O(k);第二种方法则通过打表计算的方式实现了杨辉三角的快速求解。
方法一:(模拟杨辉三角的特点,用一个数组进行不断更新,也就是上一层两数的和为下一层的数,循环k次,时间复杂度是O(n^2)的,空间复杂度是O(k)的class Solution {
public:
    vector<int> getRow(int rowIndex) {
        vector<int>vec;
        vec.push_back(1);
        for(int i=1; i<=rowIndex; i++){
            int p=0, a=0, b=vec[p];
            for(;p<i;p++){
                vec[p]=a+b;
                a=b;
                if(p+1<i)
                    b=vec[p+1];
            }
            vec.push_back(1);
        }
        return vec;
    }
};
方法二:(可以知道杨辉三角第n层的序列其实就是二项式(a+b)^n的系数,按此规律可以进行打表计算class Solution {
public:
    vector<int> getRow(int rowIndex) {
        int C[rowIndex+2][rowIndex+2];
        memset(C, 0, sizeof(C));
        for(int i=0; i<=rowIndex; i++){
            C[i][0]=1;
            for(int j=1; j<=i; j++)
                C[i][j]=C[i-1][j-1]+C[i-1][j];
        }
        vector<int>vec;
        int r = rowIndex;
        for(int i=0; i<=r; i++){
            cout<<C[r][i]<<endl;
            vec.push_back(C[r][i]);
        }
        return vec;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值