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) { vector<vector<int>> res; if (numRows <= 0) return res; res.assign(numRows, vector<int>(1)); for (int i = 0; i != numRows; i++) { res[i][0] = 1; if (i == 0) continue; for (int j = 1; j != i; j++) { res[i].push_back(res[i - 1][j - 1] + res[i - 1][j]); } res[i].push_back(1); } return res; } }; // 3 ms
另一种简洁写法
class Solution { public: vector<vector<int>> generate(int numRows) { vector<vector<int>> res(numRows); for (int i = 0; i != numRows; i++) { res[i].resize(i + 1); res[i][0] = res[i][i] = 1; for (int j = 1; j < i; j++) res[i][j] = res[i - 1][j - 1] + res[i - 1][j]; } return res; } }; // 3 ms