现在的位置: 首页 > 综合 > 正文

Pascal’s Triangle系列

2019年07月26日 ⁄ 综合 ⁄ 共 1255字 ⁄ 字号 评论关闭

1. Given numRows, generate the first numRows of Pascal's triangle.

For example, given numRows = 5,

Return

[
     [1],
    [1,1],
   [1,2,1],
  [1,3,3,1],
 [1,4,6,4,1]
]

题意:这道题比较简单,在每一行的中间(除去最左最右),它的值等于上一行同列与上一行左一列之和。只需要考虑一些边界问题即可。

class Solution {
public:
    vector<vector<int> > generate(int numRows) {
        int i,j,index;
        vector<vector<int> > triangle;
        vector<int> line;
        if (numRows == 0)
        {
            return triangle;
        }
        line.push_back(1);
        triangle.push_back(line);
        if (numRows == 1)
        {
            return triangle;
        }    
        line.push_back(1);
        triangle.push_back(line);
        if (numRows == 2)
        {
            return triangle;
        }    
        for(i=2; i<numRows; i++)
        {
            line.clear();
            line.push_back(1);
            for(j=1; j<i; j++)
            {
                index = triangle[i-1][j-1] + triangle[i-1][j];
                line.push_back(index);
            }   
            line.push_back(1);
            triangle.push_back(line);    
        }   
        return triangle; 
    }
};

2. 

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?

思路:这道题的计算公式为:

f[i][j] = f[i-1][j] + f[i-1][j-1] , i<j && i>0

f[i][j] = 1, i=0 || i=j

题目要求O(K)的空间复杂度,这时我们可以定义两个长度为K的数组,一个数组表示当前行的前一行数据,一个数组表示当前行的数据,再根据推导的公式即可写出代码。

class Solution {
public:
    vector<int> getRow(int rowIndex) {
        vector<int> aa;
        vector<int> f;
        f.resize(rowIndex+1);
        aa.resize(rowIndex+1);
        int i,j;
        for(i=0; i<=rowIndex; i++)
        {
            f[0] = 1;
            f[i] = 1;
            for(j=1; j<i; j++)
            {
                aa[j] = f[j-1] + f[j];
            }
            aa[0] = f[0];
            aa[i] = f[i];
            f = aa;
        }
        return aa;
    }
};

抱歉!评论已关闭.