leetcode-dp-数学归纳法-杨辉三角


package dp.generate;

import java.util.ArrayList;
import java.util.List;

/**
 * 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 */ public class generate { /** * 从(1,1)开始初始化,然后推一下递推公式,简单的数学归纳法 * @param numRows * @return */ public static List> generate(int numRows) { List> res = new ArrayList<>(); if (numRows == 0) { return res; } int[][] dp = new int[numRows + 1][numRows + 1]; for (int i = 1; i <= numRows; i++) { dp[i][0] = 1; dp[i][i] = 1; } for (int i = 1; i <= numRows; i++) { for (int j = 1; j <= i; j++) { dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1]; } } for (int i = 1; i <= numRows; i++) { List list = new ArrayList<>(); for (int j = 0; j < i; j++) { list.add(dp[i][j]); } res.add(list); } return res; } public static void main(String[] args) { System.out.println(generate(5)); } }

相关