问题描述:
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;
}
}
帕斯卡三角生成算法

本文介绍了一种生成帕斯卡三角的算法实现。通过分析特殊情况及递推思想,利用预设元素遍历数组并逐步构建帕斯卡三角形。
293

被折叠的 条评论
为什么被折叠?



