118. 楊輝三角
給定一個非負整數 numRows
,生成「楊輝三角」的前 numRows
行。
在「楊輝三角」中,每個數是它左上方和右上方的數的和。
示例 1:
輸入: numRows = 5
輸出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
示例 2:
輸入: numRows = 1
輸出: [[1]]
提示:
1 <= numRows <= 30
【思路】
1、dp陣列的含義
dp:定義狀態dp[i][j]為楊輝三角中第i行第j列(行索引從0開始)的元素值。
2、遞推公式
dp[i][j] = dp[i-1][j-1] + dp[i-1][j];
3、初始化dp陣列
每一行第一個元素和最後一個元素都是1,即當i = 0或j=i時,dp[i][j]=1。
4、確定遍歷順序
5、列印dp陣列
public class Solution {
public List<List<Integer>> generate(int numRows) {
//初始化動態規劃陣列
Integer[][] dp = new Integer[numRows][];
//遍歷每一行
for (int i = 0; i < numRows; i++) {
//初始化當前行
dp[i] = new Integer[i + 1];
//每一行的第一個和最後一個元素為1;
dp[i][0] = dp[i][i] = 1;
//計算中間元素
for (int j = 1; j < i; j ++) {
//中間元素等於上一行的相鄰兩個元素之和
dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];
}
}
//將動態規劃陣列轉換為結構列表
List<List<Integer>> result = new ArrayList<List<Integer>>();
for (Integer[] row: dp) {
result.add(Arrays.asList(row));
}
//返回結果列表
return result;
}
}