先给题
给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。


在杨辉三角中,每个数是它左上方和右上方的数的和。

示例:

输入: 3
输出: [1,3,3,1]
进阶:

你可以优化你的算法到 O(k) 空间复杂度吗?

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/pascals-triangle-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

这道题多的就不说了就是要找规律
只有1个1的是第0行

1.O(k!) 空间复杂度
杨辉三角Ⅱ_一维数组杨辉三角Ⅱ_商业_02
    vector<int> getRow(int rowIndex) {
        vector<int> v;
        vector<int> v1;
        v.push_back(1);//第0行
        int sum = 1;
        for(int i = 1; i < rowIndex; i++) {
            v.push_back(1);//每行的第一个元素为1
            for(int j = sum + 1; j < sum + i; j++) {
                v.push_back(v[j - i - 1] + v[j - i]);
            }
            v.push_back(1);
            sum += i + 1;
        }
        v1.push_back(1);
        for(int i = sum + 1; i <sum + rowIndex; i++) {
            v1.push_back(v[i - rowIndex - 1] + v[i - rowIndex]);
        }
        if(rowIndex != 0)
            v1.push_back(1);
        return v1;
    }
View Code

 


题解当中是开辟的二维数组,我这里用的是一维数组。

2.O(k) 空间复杂度

这里用的是滚动数组的思想,开辟两个数组,灵活的让他们改变

杨辉三角Ⅱ_一维数组杨辉三角Ⅱ_商业_02
 1     vector<int> getRow(int rowIndex) {
 2         vector<int> bef,aft;
 3         for (int i = 0; i <= rowIndex; ++i) {
 4             bef.resize(i + 1);
 5             bef[0] = bef[i] = 1;
 6             for (int j = 1; j < i; ++j) {
 7                 bef[j] = aft[j - 1] + aft[j];
 8             }
 9             aft = bef;
10         }
11         return aft;
12     }
View Code