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; }