118.杨辉三角
- 1、题目
- 2、题目分析
- 3、解题步骤
- 4、复杂度最优解代码示例
- 5、抽象与扩展
1、题目
给定一个非负整数 numRows
,生成「杨辉三角」的前 numRows
行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 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
Related Topics
- 数组
- 动态规划
2、题目分析
1、每层的首、尾 2 个位置,直接设置为 1
2、每层除了首、尾,本层j位置的值 = 上层j-1位置的值 + 上层j位置的值
3、解题步骤
1、循环生成杨辉三角的层数
2、处理指定层数(i层)的数据
2.1、每层的首、尾 2 个位置,直接设置为 1
2.2、每层除了首、尾,本层j位置的值 = 上层j-1位置的值 + 上层j位置的值
3、将本层结果存入杨辉三角
4、复杂度最优解代码示例
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> res = new ArrayList<>();
for (int i = 0; i < numRows; i++) {
// 1、循环生成杨辉三角的层数
List<Integer> row = new ArrayList<>();
for (int j = 0; j <= i; j++) {
// 2、处理指定层数(i层)的数据
if (j == 0 || j == i) {
// 2.1、每层的首、尾 2 个位置,直接设置为 1
row.add(1);
continue;
}
// 2.2、每层除了首、尾,本层j位置的值 = 上层j-1位置的值 + 上层j位置的值
List<Integer> upperLevels = res.get(i - 1);
row.add(upperLevels.get(j - 1) + upperLevels.get(j));
}
// 3、将本层结果存入杨辉三角
res.add(row);
}
return res;
}