Pascal's Triangle leetcode java(楊輝三角)

愛做飯的小瑩子發表於2014-08-03

題目

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

題解

既然講到了Pascal‘s Triangle,即楊輝三角。那麼就先去Wikipedia上面複習一下楊輝三角吧:
楊輝三角形,又稱賈憲三角形帕斯卡三角形海亞姆三角形,是二項式係數在的一種寫法,形似三角形
楊輝三角形第n層(頂層稱第0層,第1行,第n層即第n+1行,此處n為包含0在內的自然數)正好對應於二項式\left(a+b\right)^{n}展開的係數。例如第二層1 2 1是冪指數為2的二項式\left(a+b\right)^{2}展開形式a^{2}+2ab+b^{2}的係數。
楊輝三角的性質:
  1. 楊輝三角以正整數構成,數字左右對稱,每行由1開始逐漸變大,然後變小,回到1。
  2. n行的數字個數為n個。
  3. n行的第k個數字為組合數C_{n-1}^{k-1}
  4. n行數字和為2^{n-1}
  5. 除每行最左側與最右側的數字以外,每個數字等於它的左上方與右上方兩個數字之和(也就是說,第n行第k個數字等於第n-1行的第k-1個數字與第k個數字的和)。這是因為有組合恆等式:C_{n}^{i}=C_{n-1}^{i-1}+C_{n-1}^{i}。可用此性質寫出整個楊輝三角形。



根據上面那個圖,我們可以發現,第一行和第二行都由1組成。其他行的起始和結束都是1.內容由上一行相鄰兩個陣列和組成。由此我們可以寫出程式碼。
程式碼如下:
 1 public class Solution {
 2     public static List<List<Integer>> generate(int numRows) {
 3         List<List<Integer>> res = new ArrayList<List<Integer>>();
 4         
 5         if(numRows == 0)
 6             return res;
 7         
 8        for(int j = 0;j<numRows;j++){
 9            List<Integer> row = new ArrayList<Integer>();
10            row.add(1);
11         for(int i=1;i<j;i++){//除去第一行和第二行才進這個迴圈
12             List<Integer> prevRow = res.get(j-1);//當前行的上一行
13             int temp = prevRow.get(i-1)+prevRow.get(i);
14             row.add(temp);
15         }
16         if(j!=0)//除了第一行,末尾接個1
17             row.add(1);
18         res.add(row);
19        }
20        return res;
21     }

相關文章