目录
题目:
解题思路:
第一步:创建行和列
第二步:给首尾赋值
第三步:中间数
总代码:
题目:
给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
解题思路:
实际上思路很简单,中间的每个数字,就是他的上一行同位置的数据,+上一行同位置数据-1的位置的数据。
列如第三行的’2’,他的坐标是[2][1],那么他就等于[1][1]+[1][0]处位置的数据,也就是1+1=2;
所以解题步骤如下:
第一步:创建行和列
class Solution {
public:
vector> generate(int numRows) {
vector> vv;
vv.resize(numRows);
};
有些同学可能不了解vector
简单来说是这样的:我们先把括号里面的vector
那么就是开辟了vector<数据>这样一个数组,也就是我们下面图中的对象数组,数组中存放着一个个数据。
然后每个数据又开辟了vector<某类型的数据>,如下图的int数组。
用通俗一点的理解,就是vector(开辟行)
最后再根据题目已经给的numRows,用resize函数开辟列。
备注:如果不懂得resize函数的小伙伴可以看我的这篇文章c++:reserve和resize简介和区别_幻荼的博客-CSDN博客
第二步:给首尾赋值
我们可以看到,杨辉三角的每行的第一个元素和最后一个元素都是0,所以我们这里给他赋值
for(size_t i=0;i
第三步:中间数
刚才已经解释了中间数如何相加,这里直接给出代码
for(size_t i=0;i总代码:
class Solution { public: vector> generate(int numRows) { vector > vv; vv.resize(numRows); for(size_t i=0;i



