118. 杨辉三角

·  阅读 16

题目介绍

力扣118题:leetcode-cn.com/problems/pa…

image.png

image.png

动态规划

用一个二维数组dp[numRows][numRows]保存每一次动态规划的结果

  • 1.令dp[0][0]=1(第一列)
  • 2.根据以下表格找到规律

image.png

得到如下规律(以下情况均为列数大于1)

if(col==0){
    dp[row][col]=1
} else {
    dp[row][col]=dp[row-1][col-1]+dp[row-1][col]
}
复制代码

代码如下:

class Solution {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> result = new ArrayList<List<Integer>>();
        int[][] dp = new int[numRows][numRows];
        dp[0][0] = 1;
        for (int i = 1; i < numRows; i++) {
            for (int j = 0; j <= i; j++) {
                if(j == 0) {
                    //第一列和最后一列的值都是1
                    dp[i][j] = 1;
                }else {
                    dp[i][j] = dp[i-1][j-1] + dp[i-1][j];
                }
            }
        }

        //将二维数组转为List<List<Integer>>类型
        for (int i = 0; i < dp.length; i++) {
            List<Integer> tmp = new ArrayList<>();
                for (int j = 0; j < dp.length; j++) {
                    if(dp[i][j] == 0) {
                        //走到本行的末尾了
                        break;
                    }
                    tmp.add(dp[i][j]);
                }
                result.add(new ArrayList<>(tmp));
        }	
        return result;
    }
}
复制代码
分类:
后端
标签:
分类:
后端
标签: