一、题目解析:
二、知识回顾:
1.二维数组:
2. C语言中的二维数组访问方式和vector二维数组的访问,
不同区别:
(1)表面是一样的,但底层不同!
(2)静态二维数组在底层本质上也是一维数组的连续!(二维数组的数组名是:第1行数组的地址)
(3)C语言中的二维数组本质上是指针解引用!
(4)vector<vector>访问数据本质上是:operator[ ]函数的调用!
三、解题思路:
四、代码实现:
class Solution
{
public:vector<vector<int>> generate(int numRows) {// 1.创建二维数组vector<vector<int>> vv;// 2.开辟 行vv.resize(numRows);for(size_t i=0;i<numRows;i++){// 3.开辟:每一行有多少列,并把所有元素都初始化为0(第0行,有1列;第1行,有2列)vv[i].resize(i+1,0);// 有规律得:每1行的第1个元素和最后1个元素都为:1vv[i][0]=vv[i][vv[i].size()-1]=1;}// 4.接下来就处理夹在中间的元素的规律=上一行两个元素相加之和for(size_t i=0;i<numRows;i++){for(size_t j=0;j<i+1;j++){if(vv[i][j]==0)//这里我之前初始化为0,就很巧妙的判断出哪些是中间的元素。{vv[i][j]=vv[i-1][j-1]+vv[i-1][j];}}}return vv;}
};