杨辉三角Ⅱ

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


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

示例:网络

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

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

来源:力扣(LeetCode)
连接:https://leetcode-cn.com/problems/pascals-triangle-ii
著做权归领扣网络全部。商业转载请联系官方受权,非商业转载请注明出处。spa

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

1.O(k!) 空间复杂度

    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

 


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

2.O(k) 空间复杂度

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

索引

 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
相关文章
相关标签/搜索