Leetcode之Pascal's Triangle 问题
问题描述:
Given numRows, generate the first numRows of Pascal's triangle.(杨辉三角)
示例:
For example, given numRows = 5,
Return
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
问题来源:Pascal's Triangle (详细地址:https://leetcode.com/problems/pascals-triangle/description/)
思路分析:根据提示,我们可以看见这只是一个List里面嵌套了一个List,而且你会发现下面的是怎么延展开的:
1.首先每个list里面的第一个元素和最后一个元素都是1;
2.然后中间的元素都是由头上的两个元素加起来的。
所以,在这我们用i来表示第几个list,然后j来表示这个list里面的第j个元素。另外,i和j都是从0开始的,把上面的两个结论翻译过来就是:
1.if(j == 0 || j == i)
list.add(1);//这里采用了自动封箱操作
2.list.add(j, list.get(j - 1) + list.get(j));//代码中采用的是result.get(i - 1).get(j - 1).......是因为我们需要通过result取出里面的每一个list
不过最后我还给出了另外一种解法,不用通过get.get这种调用了,因为这样容易产生空指针异常,说回来还是第一种更好理解一些,更符合人类的惯性思维,不过第二种理解了也就不难了,毕竟不是啥高深的东西。
代码:
第一种添加的方法:
第二种添加的方法: