Pascal's Triangle

我用二项式解决了这个,其中溢出是用java的BigInteger解决的。但是看到大多数人是用定义解决的,计算量就不大,不会造成溢出

leetcode:https://oj.leetcode.com/problems/pascals-triangle/

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]
]
 1 //这里的帕斯卡三角即杨辉三角
 2 //         1
 3 //       1   1
 4 //     1   2   1
 5 //   1   3   3   1
 6 //用定义处理
 7 //先将第一行1 put进去
 8 //后面每一行的生成用先put第一个1和最后一个1
 9 //中间的数字由下面的方法解决
10 //先取出上一行的list,用i和j指向上一行的第一个和第二个元素,两个相加得到这行的元素,知道j到上一行的最后一个元素
11 //将生成的list加入到集合中,生成最后的结果
12 public class Solution {
13     public List<List<Integer>> generate(int numRows) {
14         List<List<Integer>> set = new ArrayList<List<Integer>>();
15         if(0 == numRows){
16             
17         }
18         else if(1 == numRows){//只求1行
19             List<Integer> listRow = new ArrayList<Integer>();
20             Integer element = new Integer(1);
21             listRow.add(element);
22             set.add(listRow);
23             
24         }
25         else{//>=2行
26             //先把第一行put进去
27             List<Integer> listRow = new ArrayList<Integer>();
28             Integer element = new Integer(1);
29             listRow.add(element);
30             set.add(listRow);
31             //找出所有的行
32             for(int n = 1; n < numRows; n++){
33                 //取出前一行的List
34                 List preRowList = set.get(n -1);
35                 //申明这一行的List并将第一个元素1add进去
36                 List<Integer> nowRowList = new ArrayList<Integer>();
37                 nowRowList.add(new Integer(1));
38                 //开始找出除第一个1和最后一个的所有元素, 由定义计算出来
39                 for(int i = 0, j = 1; j < preRowList.size(); i++, j++){
40                     Integer num_first = (Integer)preRowList.get(i);
41                     Integer num_second = (Integer) preRowList.get(j);
42                     nowRowList.add(new Integer(num_first + num_second));
43                 }
44                 //添加最后一个1
45                 nowRowList.add(new Integer(1));
46                 //添加到set集合中
47                 set.add(nowRowList);
48             }
49         }
50         
51         return set;
52     }    
53 }
原文地址:https://www.cnblogs.com/luckygxf/p/4063178.html