您的位置:首页 > 编程语言 > Java开发

Leetcode - Pascal's Triangle

2016-04-20 17:17 323 查看

Question

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]
]


Java Code

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

if(numRows == 0) return triangle;

//存储Pascal's Triangle的第一行
triangle.add(new ArrayList<Integer>());
triangle.get(0).add(1);

//使用上一行生成下一行
for(int i=1; i < numRows; ++i) {
List<Integer> preRow = triangle.get(i-1);
List<Integer> newRow = new ArrayList<Integer>();

newRow.add(1);
for(int j=1; j < i; ++j)
newRow.add(preRow.get(j-1) + preRow.get(j));
newRow.add(1);

triangle.add(newRow);
}
return triangle;
}


说明

这里还有一个简化的地方,就是利用杨辉三角的对称性,用上一行生成下一行时,只需要生成左边一半,右边直接复制得到,即

//计算得到左边一半
for(int j = 1; j <= i/2; ++j)
newRow.add(preRow.get(j-1) + preRow.get(j));
//复制得到右边一半
for(int j = (i - 1)/2; j > 0; --j)
newRow.add(newRow.get(j));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java leetcode pascal