力扣88. 杨辉三角(动态规划,Java/C/Python3实现含注释说明,简单)

目录

  • 题目描述
  • 思路及实现
    • 方式一:使用二维数组
      • 思路
      • 代码实现
        • Java版本
        • C语言版本
        • Python3版本
    • 复杂度分析
      • 时间复杂度
      • 空间复杂度
    • 方式二:使用动态规划计算杨辉三角
      • 思路
      • 代码实现
        • Java版本
        • C语言版本
        • Python3版本
      • 复杂度分析
        • 时间复杂度
        • 空间复杂度
      • 总结
  • 相似题目

  • 标签(题目类型):动态规划

题目描述

给定一个非负整数 numRows,生成杨辉三角的前numRows行。

在杨辉三角中,每个数是它正上方两数之和。

示例:

输入: 5
输出:
[
     [1],
    [1,1],
   [1,2,1],
  [1,3,3,1],
 [1,4,6,4,1]
]


示例 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

原题:LeetCode 118

思路及实现

方式一:使用二维数组

思路

我们可以使用二维数组来存储杨辉三角的每一行。对于每一行,我们可以通过上一行的数据计算得出。具体地,除了第一列和最后一列都是1之外,其余位置的值都等于它正上方的两个数之和。

代码实现

Java版本
import java.util.ArrayList;
import java.util.List;

public class Solution {
   
    public List<List<Integer>> generate(int numRows) {
   
        List<List<Integer>> triangle = new ArrayList<>();
        
        for (int i = 0; i < numRows; i++) {
   
            List<Integer> row = new ArrayList<>();
            
            for (int j = 0; j <= i; j++) {
   
                if (j == 0 || j == i) {
   
                    row.add(1);
                } else {
   
                    row.add(triangle.get(i - 1).get(j - 1) + triangle.get(i - 1).get(j));
                }
            }
            
            triangle.add(row);
        }
        
        return triangle;
    }
}

说明:

  • 首先创建一个二维数组triangle来存储杨辉三角的每一行。
  • 对于每一行,遍历该行的每个位置,如果是第一列或最后一列,则添加1;否则,计算它正上方的两个数之和,并添加到当前行中。
  • 最后将每一行添加到triangle中,并返回triangle。
C语言版本
#include 

typedef struct {
   
    int** row;
    int* rowSize;
    int triangleSize;
} Triangle;

你可能感兴趣的:(LeetCode,leetcode,动态规划,java)