zoukankan      html  css  js  c++  java
  • [LeetCode]16. Pascal's Triangle II杨辉三角

    Given an index k, return the kth row of the Pascal's triangle.

    For example, given k = 3,
    Return [1,3,3,1].

    Note:
    Could you optimize your algorithm to use only O(k) extra space?

    解法:对于每一行我们知道如果从前往后扫,第i个元素的值等于上一行的res[i]+res[i+1],可以看到数据是往前看的,如果我们只用一行空间,那么需要的数据就会被覆盖掉(计算n+1行第i+1个元素时,已经更新了第i个元素为第n+1行的第i个元素,而不是需要的第n行的第i个元素)。所以这里采取的方法是从后往前扫,这样每次需要的数据就是res[i]+res[i-1],我们需要的数据不会被覆盖,因为需要的res[i]只在当前步用,下一步就不需要了。这个技巧在动态规划省空间时也经常使用,主要就是看我们需要的数据是原来的数据还是新的数据来决定我们遍历的方向。时间复杂度还是O(n^2),而空间这里是O(k)来存储结果,仍然不需要额外空间。

    class Solution {
    public:
        vector<int> getRow(int rowIndex) {
            vector<int> row;
            if (rowIndex < 0) 
                return row;
    
            row.assign(rowIndex + 1, 0);
            for (int i = 0; i <= rowIndex; ++i) 
            {
                if (i == 0) 
                {
                    row[0] = 1;
                    continue;
                }
                for (int j = rowIndex; j >= 1; --j) 
                    row[j] = row[j] + row[j - 1];
            }
            return row;
        }
    };
  • 相关阅读:
    PDO 数据访问抽象层
    注册审核、批量删除
    分页查询
    会话用法
    封装成类
    多条件查询(复选框条件)
    IP子网划分
    redhat 用yum安装的apache、mysql一般默认安装在哪个目录下?
    nslookup
    linux 设置时间
  • 原文地址:https://www.cnblogs.com/aprilcheny/p/4859267.html
Copyright © 2011-2022 走看看