題目:
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在內的自然數)正好對應於二項式展開的系數。例如第二層1 2 1是冪指數為2的二項式
展開形式
的系數。
楊輝三角的性質:
- 楊輝三角以正整數構成,數字左右對稱,每行由1開始逐漸變大,然后變小,回到1。
- 第
行的數字個數為
個。
- 第
行的第
個數字為組合數
。
- 第
行數字和為
。
- 除每行最左側與最右側的數字以外,每個數字等於它的左上方與右上方兩個數字之和(也就是說,第
行第
個數字等於第
行的第
個數字與第
個數字的和)。這是因為有組合恆等式:
。可用此性質寫出整個楊輝三角形。
”
根據上面那個圖,我們可以發現,第一行和第二行都由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 }
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 }