一、题目
给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
示例 2:
输入: numRows = 1
输出: [[1]]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/pascals-triangle
二、思路
逐行生成杨辉三角中的元素,每行最左边和最右边的元素为1,且每行元素的个数和所在行数相等,非两侧元素需要用到上一行的元素计算,计算方法公式为 ans[i][j] = ans[i-1][j-1] + ans[i-1][j],第一行的元素视为两侧元素,不需要用到上述公式。
三、代码
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> ans;
for(int i=0; i<numRows; i++){
vector<int> tmp;
for(int j =0; j<=i; j++){ //生成当前行
if(j ==0 || j == i){ //每行最左和最右的元素
tmp.push_back(1);
continue;
}
tmp.push_back(ans[i-1][j-1] + ans[i-1][j]);
}
ans.push_back(tmp);
}
return ans;
}
};
四、运行结果