楊輝三角Ⅱ

先給題
給定一個非負索引 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
相關文章
相關標籤/搜索