題目描述
給定一個非負整數 numRows,生成楊輝三角的前 numRows 行。
在楊輝三角中,每個數是它左上方和右上方的數的和。
示例:
輸入: 5
輸出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
解題思路
1.第一行單獨處理,只有一個元素 1;
2.處理第 2 到 n 行:
(1)每一行的第一個元素是 1, 單獨處理
(2)根據楊輝三角的特點,每一行的第 2 (當 行數 > 2 時)到 “行數- 1” 個元素的值, 是它左上方和右上方的數的和;
(3)每一行的最後一個元素也是 1,單獨處理
代碼(Java實現)
import java.util.ArrayList;
import java.util.List;
/**
* @author : flower48237
* @2020/2/25 22:09
* explanation: LeetCode精選TOP面試題118.楊輝三角
*/
public class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> triangle = new ArrayList<List<Integer>>();
if(numRows < 1){ // 判斷合法性
return triangle;
}
// 第一行單獨處理,只有一個元素 1
List<Integer> first = new ArrayList<>();
first.add(1);
triangle.add(first);
// 處理第 2 到 n 行
for (int rownum = 1; rownum < numRows; rownum ++){
// 創建新的一行
List<Integer> newrow = new ArrayList<>();
// 獲取當前新行的上一行
List<Integer> prerow = triangle.get(rownum - 1);
// 每一行的第一個元素是 1, 單獨處理
newrow.add(1);
// 根據楊輝三角的特點
// 每一行的第 2 (當 行數 > 2 時)到 “行數- 1” 個元素的值, 是它左上方和右上方的數的和
for (int k = 1; k < rownum; k ++){
newrow.add(prerow.get(k - 1) + prerow.get(k));
}
// 每一行的最後一個元素也是 1,單獨處理
newrow.add(1);
triangle.add(newrow);
}
return triangle;
}
}