LeetCode - 118. Pascal's Triangle

本文介绍了一种处理特定三角形数组的方法,通过将其视为半个矩阵来简化问题,并提供了一个简洁的Java实现示例。文章还强调了如何正确实例化和访问List<List<Integer>>类型的数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这道题目是有关三角形的题目,因此可能会涉及到二维数组的问题,在处理这样的三角形问题的时候,有一个比较好的方法就是将三角形当作半个矩阵来看,这样可以比较方便地理清元素下标之间的关系。比如题目中给出的例子是这样:

[
     [1],
    [1,1],
   [1,2,1],
  [1,3,3,1],
 [1,4,6,4,1]
]
我们可以将它这样来对待:

[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]

这样就可以看出元素下标之间的关系:对于中间部分的某个元素a[i][j] = a[i][j - 1] + a[i - 1][j - 1];而前两行,对角线和第一列的元素均为1。一开始我也是按照这种方式来做的,但是这样就分了比较多的情况,处理起来很麻烦,有一个更简单的判断方式就是当i == 0 || j == 0 || j == i的时候,元素为1,这样就可以将所有的内容统一的一个循环里进行计算。另外还有一个需要注意的地方,在我们找规律的时候,元素的坐标是[列][行],而在我们存储元素的ArrayList<List<Integer>>中,第一次get得到的是行,第二次get得到的是列,也就是说我们在其中找元素的时候按照[行][列]的方式,这一点要仔细考虑到。代码如下:

public class Solution{
    public List<List<Integer>> generate(int numRows){
        List<List<Integer>> triangle = new ArrayList<List<Integer>>();

        // Corner case
        if(numRows < 1) return triangle;

        for(int i = 0; i < numRows; i++){
            List<Integer> level = new ArrayList<Integer>();
            for(int j = 0; j <= i; j++){
                if(i == 0 || j == 0 || i == j){
                    level.add(1);
                }else{
                    level.add(triangle.get(i - 1).get(j - 1) + triangle.get(i - 1).get(j));
                }
            }
            triangle.add(level);
        }

        return triangle;
    }
}

知识点

1. List<List<Integer>>的实例化方式是ArrayList<List<Interger>>()或者是ArrayList<>();而不是ArrayList<ArrayList<Integer>>()

2. 如果使用ArrayList<List<Interger>>()存储二维的数组,那么访问元素的方式是get(行).get(列)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值