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

原问题链接: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;
    }
}

猜你喜欢

转载自shmilyaw-hotmail-com.iteye.com/blog/2308157