vector容器解决杨辉三角

发布时间:2024年01月15日

一、题目描述

118. 杨辉三角

给定一个非负整数?numRows生成「杨辉三角」的前?numRows?行。

在「杨辉三角」中,每个数是它左上方和右上方的数的和。

示例 1:

输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]

示例?2:

输入: numRows = 1
输出: [[1]]

二、题目解析

在之前只学了C语言,用二维数组创建写这道题时,需要动态开辟数组。很麻烦。

但是学了vector容器之后,使用它来秒解这道题,非常的爽!!!

首先我们需要开辟空间,vector容器开辟空间的用resize这个方法,并且开辟的时候还能直接赋值,简直不要太爽!

(注意resize和reverse的区别:Reserve操作是用于预分配Vector的容量,Reserve操作只是预分配内存,并不会改变Vector的大小Resize操作是用于改变Vector的大小。当我们需要增加或减少Vector中的元素数量时,可以使用Resize操作。Resize会改变Vector的大小,并且如果需要的话,它会分配或释放内存。)

所以我们可以利用for循环,让第一行开辟的数据是1,第二行是2,以此来动态开辟数组!

杨辉三角最核心的一点就是:该元素的值 = 上一行同位置的元素 + 上一行同位置元素的前一个元素

最后直接返回vector数组即可~

三、原码

class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        vector<vector<int>> vv;
        vv.resize(numRows);
        for(int i = 0;i<numRows;i++)
        {
            vv[i].resize(i+1,0);//给每一行开空间并且赋值
            vv[i].front() = vv[i].back() = 1;
        }
        for(int i = 0;i<vv.size();i++)
        {
            for(int j = 0;j<vv[i].size();j++)//直接计算每一行有多少个值
            {
                if(vv[i][j] == 0)
                {
                    vv[i][j] = vv[i-1][j] + vv[i-1][j-1];//杨辉三角的真谛
                }
            }
        }
        return vv;
    }
};

文章来源:https://blog.csdn.net/hanwangyyds/article/details/135609942
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。