leetcode之Pascal's Triangle II

来源:互联网 发布:redis和mysql结合 编辑:程序博客网 时间:2024/05/22 17:10

Pacsal’s Triangle也称杨辉三角,其每一行的值都是其肩上两个数的和,leetcode中求杨辉三角的算法比较简单,在此不再表述,下面对Pasca‘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?

这道题的难点仍是空间限制,考虑到在计算杨辉三角时,存在如下关系:v[i]=v[i-1]+v[i],所以在计算每行的值时,可以从后往前计算,这样可以不破坏之前的元素,另外,在C++中vector是可以声明指定大小的,并且还可以赋予其默认值,vector的详细用法参见:

http://blog.csdn.net/fm0517/article/details/4254099

代码实现如下:

class Solution {public:    vector<int> getRow(int rowIndex) {        vector<int>v(rowIndex+1,1);if(rowIndex == 0 || rowIndex == 1)return v;for(int i = 2; i <= rowIndex; i++ ){for(int j = i - 1; j > 0; j--){    v[j] = v[j] + v[j-1];}}return v;    }};
今天A的leetcode上的几道题都是空间限制类型的,在空间受限的情况下,要尽最大可能的发挥已有空间的使用效率,并注意计算顺序,如今天上午那道腾讯2012年笔试题中的计算乘积的题目是通过前后两种遍历实现的,而矩阵置0是将第一行和第一列作为标志使用,而当前这道题则是通过倒序计算来节省空间。

0 0