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;
        }
    };
  • 相关阅读:
    uva 1584.Circular Sequence
    成为Java顶尖程序员 ,看这11本书就够了
    java 线程同步 原理 sleep和wait区别
    xargs -r
    java
    事故分析
    各大互联网公司架构演进之路汇总
    char 汉字
    nginx优化之request_time 和upstream_response_time差别
    学习进度05
  • 原文地址:https://www.cnblogs.com/aprilcheny/p/4859267.html
Copyright © 2011-2022 走看看