题目描述:
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
解题:
class Solution { public: /* 该题目的主要的考察点在于: 如何使二维vector数组的行数组长度不同 解决方法: 1.开辟numRows行 1 列的二维数组,后续根据每行的数据数量进行扩张 https://blog.csdn.net/u013040591/article/details/80329066 */ vector<vector<int>> generate(int numRows) { //初始化二维vector数组空间大小,并全部初始化为 0 vector<vector<int> > A(numRows,vector<int>(1,1)); //确定每行中数据的长度以及内部存储的数据,第一二行不需要进行处理 for(int i = 1;i <numRows;i ++) { for( int j = 1;j < i;j ++) { //计算左上角,上方的和插入 A[i].push_back(A[i-1][j-1]+A[i-1][j]); } //将每列的最后一个数插入到最后 A[i].push_back(1); } return A; } }; //还需要进行加强对于vector等容器的学习
执行用时:4 ms, 在所有 C++ 提交中击败了38.74%的用户
内存消耗:6.6 MB, 在所有 C++ 提交中击败了50.93%的用户
//2.另外一种使用resize()进行开辟空间的方法,相比上面第一个方法来效率更快 /*vector<vector<int>> generate(int numRows) { //初始化二维vector数组空间大小,并全部初始化为 0 vector<vector<int> > A(numRows,vector<int>(1,1)); //确定每行中数据的长度以及内部存储的数据,第一二行不需要进行处理 for(int i = 1;i <numRows;i ++) { A[i].resize(i+1); for( int j = 1;j < i;j ++) { //计算左上角,上方的和赋值 A[i][j] = A[i-1][j-1]+A[i-1][j]; } //将每列的最后一个数插入到最后 A[i][i] = 1; } return A; } }; */
执行用时:0 ms, 在所有 C++ 提交中击败了100%的用户
内存消耗:6.7 MB, 在所有 C++ 提交中击败了34.67%的用户