leetcodedp数学归纳法杨辉三角

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));
    }
}

不会,我可以学;落后,我可以追赶;跌倒,我可以站起来!
原文地址:https://www.cnblogs.com/xiaoshahai/p/15761489.html