动态规划真的懂了呀系列《三角形DP:杨辉三角》

324 阅读1分钟

Problem: 118. 杨辉三角

思路

讲述看到这一题的思路

解题方法

杨辉三角是个等边三角形,建立一个头朝下,往右边倾斜45度的坐标轴, 第一步:结果集用二维数组表示,这里有明显的递推特征,直接利用dp的步骤: ·初始化 ·子问题划分,发现可以递推,dp起来 ·从左往右的递推,求出dp的解,循环扩大第二步,覆盖整个问题的解,也就是走到n行 ·注意下边界情况 第二步:画个图 WechatIMG71.jpg

复杂度

时间复杂度:

添加时间复杂度, 示例: O(n)O(n)

空间复杂度:

添加空间复杂度, 示例: O(n)O(n)

Code

class Solution {
    public List<List<Integer>> generate(int numRows) {
        int n = numRows;

        int[][] dp = new int[n][n];

        for(int i =0;i<n;i++){
            dp[i][0] = 1;
        }

        for(int i=1;i<n;i++){
            for(int j=1;j<=i;j++){
                dp[i][j] = dp[i-1][j-1]+dp[i-1][j];
            }
        }

        List<List<Integer>> res = new ArrayList();
        for(int i =0;i<n;i++){
            List<Integer> rows = new ArrayList();
            for(int j =0; j<n; j++){
                if(dp[i][j] != 0){
                    rows.add(dp[i][j]);
                }
                // else
                // {
                //     rows.add(0);
                // }
            }
            res.add(rows);
        }
        return res;
    }
}