package dp.generate; import java.util.ArrayList; import java.util.List; /** * 118. 杨辉三角 * 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 * <p> * 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 * <p> * <p> * <p> * <p> * <p> * 示例 1: * <p> * 输入: numRows = 5 * 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] * 示例 2: * <p> * 输入: numRows = 1 * 输出: [[1]] * <p> * <p> * 提示: * <p> * 1 <= numRows <= 30 */ public class generate { /** * 从(1,1)开始初始化,然后推一下递推公式,简单的数学归纳法 * @param numRows * @return */ public static List<List<Integer>> generate(int numRows) { List<List<Integer>> 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<Integer> 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)); } }
不会,我可以学;落后,我可以追赶;跌倒,我可以站起来!