[LeetCode] Pascal's Triangle

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

For example, given numRows = 5,
Returncode

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



仍是easy題適合我,略做思考之後基本第一次就能AC。凡是遇到這種有遞推性質的題目,通常的思路就是自底向上一步一步推出來,推到輸入限制時返回就好了,這裏有幾個pascale三角的性質須要注意一下:
1.第n層有n個元素。
2.除了首位各一個1之外,其n-2個元素都知足 c[n] = p[n-1]+p[n],其中c是當前層,p是上一層。
3.第一層爲{1}
理解了這三個性質,再加上遞推的思想就能夠寫出來了。
void pascalIter(int i, int n, vector<vector<int>> &ret) {
    if (i > n) return;
    vector<int>r;
    r.push_back(1);
    vector<int> t = ret[i-2];
    for (int k = 0; k < i-2; k++) {
        r.push_back(t[k] + t[k+1]);
    }
    r.push_back(1);
    ret.push_back(r);
    pascalIter(i+1, n, ret);
}

vector<vector<int> > generate(int numRows) {
    vector<vector<int>> ret;
    if (numRows < 1) return ret;
    
    ret.push_back({1});
    if (numRows == 1) return ret;
    
    pascalIter(2, numRows, ret);
    return ret;
}
相關文章
相關標籤/搜索