LeetCode

采用2项公式解这问题挺简单,唯一需要注意的是当两个比较大的数相乘时,容易越界,我采用分子、分母同时除以他们的最大公约数。

下面是AC代码:

 1  /**
 2      * Given an index k, return the kth row of the Pascal's triangle.
 3      * only O(k) extra space
 4      * @param rowIndex
 5      * @return
 6      */
 7     public ArrayList<Integer> getRow(int rowIndex){
 8         ArrayList<Integer> r = new ArrayList<Integer>();
 9         if(rowIndex<0)
10             return r;
11         r.add(1);
12         if(rowIndex == 0)
13             return r;
14         for(int i=1;i<rowIndex;i++){
15             //It's very important here!! handle the big number that's out of range
16             if(r.get(i-1)>Math.pow(2, 31)/(rowIndex-i+1))
17              {
18                 int t = gcd(r.get(i-1),i);
19                 int temp = r.get(i-1)/t * (rowIndex-i+1)*t/i;
20                 System.out.println(temp);
21                 r.add(temp);
22                 continue;
23              }
24                 
25             int temp = r.get(i-1)*(rowIndex-i+1)/i;
26             r.add(temp);
27         }
28         r.add(1);
29         return r;
30     }
31     /**
32      * 求最大公约数,为了处理大整数
33      * @param a
34      * @param b
35      * @return
36      */
37     private int gcd(int a, int b){
38         while(a%b!=0){
39             int t = b;
40             b = a%b;
41             a = t;
42         }
43         return b;
44     }
45    
有问题可以和我联系,bettyting2010#163 dot com
原文地址:https://www.cnblogs.com/echoht/p/3703108.html