LeetCode - 118. Pascal's Triangle

来源:互联网 发布:希腊失业率数据 编辑:程序博客网 时间:2024/05/17 02:15

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

[     [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(列)

0 0
原创粉丝点击