题目 - 点击直达
- [1. 118. 杨辉三角 简单](#1. 118. 杨辉三角 简单)
-
- [1. 题目详情](#1. 题目详情)
-
- [1. 原题链接](#1. 原题链接)
- [2. 题目要求](#2. 题目要求)
- [3. 基础框架](#3. 基础框架)
- [2. 解题思路](#2. 解题思路)
-
- [1. 思路分析](#1. 思路分析)
- [2. 时间复杂度](#2. 时间复杂度)
- [3. 代码实现](#3. 代码实现)
1. 118. 杨辉三角 简单
1. 题目详情
给定一个非负整数 numRows,生成「杨辉三角」的前 n u m R o w s numRows numRows 行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
1. 原题链接
2. 题目要求
示例 1:
输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
示例 2:输入: numRows = 1
输出: [[1]]
提示:
1 < = n u m R o w s < = 30 1 <= numRows <= 30 1<=numRows<=30
3. 基础框架
● Cpp代码框架
cpp
class Solution {
public:
vector<vector<int>> generate(int numRows) {
}
};
2. 解题思路
1. 思路分析
( 1 ) (1) (1) 找到杨辉三角的规则:
- 最左边位置上的数都是1;
- 对角线位置上的数都是1;
- 普通位置上的数 = 上一行且同一列位置的数 + 上一行且前一列位置的数;
- 第n行的元素个数是n个;
( 2 ) (2) (2) 进行两层循环,外层循环对应生成n行序列;内层循环对应本次生成的序列,生成规则已知;
2. 时间复杂度
O ( N 2 ) O(N^2) O(N2)
两层循环,共生成 n n n层,第 i i i层生成的元素是 i i i个,其中 1 < = i < = n 1<=i<=n 1<=i<=n;
1 + 2 + 3 + . . . + i + . . . n = ( n ∗ ( n + 1 ) ) / 2 1+2+3+...+i+...n=(n*(n+1))/2 1+2+3+...+i+...n=(n∗(n+1))/2
3. 代码实现
cpp
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> vv;
for(int i = 0; i < numRows; ++i){
vector<int> tmp(i + 1);
for(int j = 0; j <= i; ++j){
if(j == 0 || j == i){
tmp[j] = 1;
}
else{
tmp[j] = vv[i - 1][j] + vv[i - 1][j - 1];
}
}
vv.push_back(tmp);
}
return vv;
}
};
T h e The The E n d End End