题目描述
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
解题思路
1.第一行单独处理,只有一个元素 1;
2.处理第 2 到 n 行:
(1)每一行的第一个元素是 1, 单独处理
(2)根据杨辉三角的特点,每一行的第 2 (当 行数 > 2 时)到 “行数- 1” 个元素的值, 是它左上方和右上方的数的和;
(3)每一行的最后一个元素也是 1,单独处理
代码(Java实现)
import java.util.ArrayList;
import java.util.List;
/**
* @author : flower48237
* @2020/2/25 22:09
* explanation: LeetCode精选TOP面试题118.杨辉三角
*/
public class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> triangle = new ArrayList<List<Integer>>();
if(numRows < 1){ // 判断合法性
return triangle;
}
// 第一行单独处理,只有一个元素 1
List<Integer> first = new ArrayList<>();
first.add(1);
triangle.add(first);
// 处理第 2 到 n 行
for (int rownum = 1; rownum < numRows; rownum ++){
// 创建新的一行
List<Integer> newrow = new ArrayList<>();
// 获取当前新行的上一行
List<Integer> prerow = triangle.get(rownum - 1);
// 每一行的第一个元素是 1, 单独处理
newrow.add(1);
// 根据杨辉三角的特点
// 每一行的第 2 (当 行数 > 2 时)到 “行数- 1” 个元素的值, 是它左上方和右上方的数的和
for (int k = 1; k < rownum; k ++){
newrow.add(prerow.get(k - 1) + prerow.get(k));
}
// 每一行的最后一个元素也是 1,单独处理
newrow.add(1);
triangle.add(newrow);
}
return triangle;
}
}
本文作者:
whtli
本文链接: https://hexo.whtli.cn/archives/e09ed3e9.html
版权声明: 遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
本文链接: https://hexo.whtli.cn/archives/e09ed3e9.html
版权声明: 遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。