// Source : https://leetcode-cn.com/problems/pascals-triangle-ii/
// Date : 2021-09-23
题目描述:
给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: rowIndex = 3
输出: [1,3,3,1]
示例 2:
输入: rowIndex = 0
输出: [1]
示例 3:
输入: rowIndex = 1
输出: [1,1]
提示:
0 <= rowIndex <= 33
题目分析:该题与杨辉三角类似,但是上一个杨辉三角是需要我们返回前 n 行,然而现在的题目是要求我们返回第 n 行,因此外层 for 循环的判断条件需要格外注意,但是小编发现将 ≤ 换为 < 的时候,运行速度会快很多,如果有大佬知道原因,还请不吝赐教,然后按照之前的代码进行编写即可,最后返回的时候需要返回第 n 行即可。
之前的代码:https://blog.csdn.net/qq_44614524/article/details/120398612
代码:
class Solution
{
public:
vector<int> getRow(int rowIndex)
{
//定义一个二维数组
vector<vector<int>> my_arr(10000);
//因为本题需要返回当前某行的元素,因此循环判断条件需要注意
//但是如果换成注释掉的语句,速度会快很多
//for(int i = 0;i < rowIndex + 1; ++i)
for(int i = 0;i <= rowIndex; ++i)
{
//行数必须从0开始,因此要将当前行(第i行)的元素数置为i + 1
my_arr[i].resize(i + 1);
//二位数组每行第一位和最后一位置为1
my_arr[i][0] = my_arr[i][i] = 1;
for(int j = 1;j < i;++j)
{
//计算第三行开始的中间位置上的元素的值
my_arr[i][j] = my_arr[i - 1][j - 1] + my_arr[i - 1][j];
}
}
//返回特定行的元素
return my_arr[rowIndex];
}
};