问题描述:
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] ]
原问题链接:https://leetcode.com/problems/pascals-triangle/
问题分析
这个问题的思路需要一点时间来考虑。在针对一些特殊情况的考虑来说,我们首先要考虑numRows小于1的情况。这时候我们只需要返回一个空的list就可以了。
而针对numRows等于1的情况,则需要返回一个包含有数字1的List。对于后续的多个元素的情况呢?我们可以使用一个pre元素,它的值初始为0,每次我们遍历一个数组的时候,将pre和当前数组里的元素相加,并将结果加入到新的数组中。在遍历的过程中,每次相加完之后则将pre设置为当前元素的值,再进行下一轮的循环。当然,在当前数组遍历结束后,我们还需要在循环外将pre加入到新数组中,这也是前一个数组中的最后一个元素。
这样我们就实现了从pascal三角里从一级推导出下一级的过程。有了这个步骤,我们可以很容易的实现如下代码:
public class Solution { public List<List<Integer>> generate(int numRows) { List<List<Integer>> result = new ArrayList<>(); if(numRows == 0) return result; List<Integer> list = new ArrayList<>(); list.add(1); result.add(list); int pre = 0; for(int i = 1; i < numRows; i++) { List<Integer> next = new ArrayList<>(); for(int j : list) { next.add(pre + j); pre = j; } next.add(pre); pre = 0; list = next; result.add(list); } return result; } }