118. Pascal's Triangle&&119. Pascal's Triangle II

来源:互联网 发布:国际学校知乎 编辑:程序博客网 时间:2024/06/08 03:24

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]]

解法:没有什么,用一个成员是vector的vector逐层生成。

class Solution {public:    vector<vector<int>> generate(int numRows) {        vector<vector<int>> r;        vector<int> pre;        vector<int> p;        for(int i=0;i<numRows;i++){            p.clear();            for(int j=0;j<=i;j++){                if(j==i||j==0)p.push_back(1);                else                p.push_back(pre[j-1]+pre[j]);            }            r.push_back(p);            pre=p;        }        return r;    }};

这道题更深一层就是 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].

要注意的一点是虽然给的是K,但是应该返回的是K+1层的序列。

解法:有一种是跟着上一道题,直接返回最后一层。但是这样……效率……

我就知道这种题一定要找规律……我还是太嫩了,最后找到有一个很厉害的公式

v[i]=v[i-1]*(rowIndex+1-i)/i;

class Solution {public:    vector<int> getRow(int rowIndex) {        vector<int> v;        v.resize(rowIndex+1);        v[0]=v[rowIndex]=1;        for(int i=1;i<=v.size()/2;i++){            v[i]=v[rowIndex-i]=v[i-1]*(rowIndex+1-i)/i;        }        return v;    }};



0 0