LeetCode c++-- 118.杨辉三角

题目描述:

给定一个非负整数 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%的用户
posted @ 2020-08-19 13:46  屁屁-rtq  阅读(116)  评论(0编辑  收藏  举报