题目描述
题干:
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
题解思路
先说说杨辉三角形,欧洲也叫帕斯卡三角形,比杨辉落后600多年才总结出来的模型,与数学二项式和组合联系紧密
就这个伟大的算法题,题干告诉了我们规律,简单的做法就是按照这个规律来构建二维数组来完成
但是看他的输出你会发现结果并不是二维数组构成的,而且方法类型也表明了用List数组嵌套,还有Integer的泛型约束
其实思路还是不变的,就是用到List.add方法来代替数组即可,但是这只是普通方法,在评论区有着一种新方法
他发现发现当前一行只比上一行多了一个元素,最最关键的一点:本行元素等于上一行元素往后错一位再逐个相加
https://leetcode-cn.com/problems/pascals-triangle/solution/qu-qiao-jie-fa-cuo-yi-wei-zai-zhu-ge-xiang-jia-28m/
正确代码
class Solution {
public List<List<Integer>> generate(int numRows) {
//先声明最外层List
List<List<Integer>> ans = new ArrayList<List<Integer>>();
for (int i = 0; i < numRows; ++i) {
//声明内层List,最后没循环一次,外层就添加新一层的List
List<Integer> row = new ArrayList<Integer>();
for (int i1 = 0; i1 <= i; ++i1) {
//每一行最后一个和第一个都是1
if (i1 == 0 || i1 == i)
row.add(1);
else
//根据规律,每个数字等于上一行的左右两个数字之和
row.add(ans.get(i - 1).get(i1 - 1) + ans.get(i - 1).get(i1));
}
//加入到外层List中
ans.add(row);
}
return ans;
}
}
总结
其实本题还是依照了传统做法,如果你也能像参考的方法那样想到新的解题思路,那就是再好不过了
文章如果存在问题或者有更好的题解,希望大佬斧正和评论,各自努力,你我最高处见