Pascal's Triangle
来自 <https://leetcode.com/problems/pascals-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]
]
题目解读:
杨辉三角问题,指的是三角形的顶层是1,每一层最两侧的元素也是1,其余元素是其上方两个数之和。给定行数numsRows.在list中存储相应的杨辉三角的值。
解析:
此题目主要是找当前元素其上方两个元素的标号。在List中可以直接使用get(j+1)和get(j)来获取当前元素i其上方的两个元素值。
Java代码:
public static List<List<Integer>> generate(int numRows) { List<List<Integer>> result = new ArrayList<List<Integer>>(); /** * 用于记录前一行元素 */ ArrayList<Integer> previousLevel = null; /** * 用于记录当前行元素 */ ArrayList<Integer> currentLevel = null; for (int i=0; i<numRows; i++) { if(i==0) { currentLevel = new ArrayList<Integer>(); currentLevel.add(1); } else { previousLevel = (ArrayList<Integer>)result.get(i-1); currentLevel = new ArrayList<Integer>(); /** * 在每一行的开始加入1 */ currentLevel.add(1); for(int j=0; j<i-1; j++) { currentLevel.add(previousLevel.get(j) + previousLevel.get(j+1)); } /** * 每行结束后加入最后一个元素1 */ currentLevel.add(1); } result.add(currentLevel); } return result; }
算法性能: