题目

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

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

img

示例 1:

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

示例 2:

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

提示:

  • 1 <= numRows <= 30

解答

  • 直接模拟

直接看代码吧 就是直接模拟:

class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        vector<vector<int>> results; // 初始化结果数组
        for (int i = 0; i < numRows; i++) { // 按行进行遍历
            // i是当前行号
            vector<int > temp_arr(i+1, 1); // 初始化temp_arr数组用于暂时存储每行的数字
            for (int j = 0; j <= i; j++) { // 每行的元素等于每行的行号,行号从0开始,所以j <= i
                int temp = -1; // 用temp存储一行里单个元素的临时值
                if (j == 0 || j == i || i == 1) { // 如果遍历到了这一行的第一个元素或者最后一个元素,或者现在在遍历第一行 
                    continue; // 此时无需赋值,因为temp_arr在初始化的时候给所有元素都是1的值
                }
                else {
                    temp_arr[j] = results[i-1][j-1] + results[i-1][j]; // 否则该行元素就是它左上方和右上方的数的和
                }
            }
            results.push_back(temp_arr); // 将遍历完这一行的结果push进最终的结果数组
        }
        return results;// 返回结果数组
    }
};