LeetCode 动态规划之杨辉三角

简介: LeetCode 动态规划之杨辉三角

题目


杨辉三角


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


在「杨辉三角」中,每个数是它左上方和右上方的数的和。


网络异常,图片无法展示
|


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


题解


解题分析


杨辉三角介绍:


杨辉三角,是二项式系数在三角形中的一种几何排列,南宋时期数学家杨辉在 1261年 所著《详解九章算法》中出现。


在欧洲,帕斯卡(1623-1662)在1654年发现这一数学规律,所以这个又叫做帕斯卡三角形。帕斯卡的发现比 杨辉 要迟393年,比 贾宪 迟600年。 杨辉三角是中国数学史上的一个伟大成就。


杨辉三角形的规律如题目中所示。


题解思路


  1. 定义一个集合存储结果集


  1. 定义一个两重循环,分别进行运算,row 数为 numRows, 列数的值为 0 -> i 其中 i 表示当前是第几行.


  1. 如果当前 row 的列是第一列或最后一个列的当前的值为 1。


  1. 当前行其他的列的其他数据, 等于 re.get(i-1).get(j-) + re.get(i -1).get(j) 之和


复杂度分析


  • 时间复杂度:O(num * numRow ^2)


  • 空间复杂度:O(1)


解题代码


题解代码如下(代码中有详细的注释说明):


class Solution {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> re = new ArrayList<>();
        for (int i =0; i< numRows; i++) {
            List<Integer>  row = new ArrayList<>();
            for (int j=0; j<=i; j++) {
                // 行中的第一数据和最后一个数据的值为 1
                if (j == 0 || j == i) {
                    row.add(1);
                } else {
                    // 其他数据, 等于 re.get(i-1).get(j-) + re.get(i -1).get(j) 之和
                    row.add(re.get(i -1).get(j -1) + re.get(i -1).get(j));
                }
            }
            re.add(row);
        }
        return re;
    }
}


提交后反馈结果:


image.png


参考信息



相关文章
|
8月前
|
机器学习/深度学习 算法 Go
【LeetCode 热题100】139:单词拆分(动态规划全解析+细节陷阱)(Go语言版)
本题是 LeetCode 热题 139:单词拆分(Word Break),需判断字符串 `s` 是否能由字典 `wordDict` 中的单词拼接而成。通过动态规划(DP)或记忆化搜索解决。DP 中定义布尔数组 `dp[i]` 表示前 `i` 个字符是否可拆分,状态转移方程为:若存在 `j` 使 `dp[j]=true` 且 `s[j:i]` 在字典中,则 `dp[i]=true`。初始条件 `dp[0]=true`。代码实现中用哈希集合优化查找效率。记忆化搜索则从起始位置递归尝试所有切割点。两种方法各有利弊,DP 更适合面试场景。思考扩展包括输出所有拆分方式及使用 Trie 优化大字典查找。
269 6
|
缓存
力扣每日一题 6/14 动态规划+数组
力扣每日一题 6/14 动态规划+数组
124 1
|
算法 索引
力扣每日一题 6/28 动态规划/数组
力扣每日一题 6/28 动态规划/数组
130 0
|
存储
力扣每日一题 6/19 排序+动态规划
力扣每日一题 6/19 排序+动态规划
137 0
|
算法
力扣每日一题 6/16 字符串 + 随机一题 动态规划/数学
力扣每日一题 6/16 字符串 + 随机一题 动态规划/数学
124 0
|
机器人
【LeetCode】--- 动态规划 集训(二)
【LeetCode】--- 动态规划 集训(二)
89 0
【LeetCode】--- 动态规划 集训(一)
【LeetCode】--- 动态规划 集训(一)
118 0
【42页动态规划学习笔记分享】动态规划核心原理详解及27道LeetCode相关经典题目汇总(4)
【42页动态规划学习笔记分享】动态规划核心原理详解及27道LeetCode相关经典题目汇总
|
存储 算法
【42页动态规划学习笔记分享】动态规划核心原理详解及27道LeetCode相关经典题目汇总(1)
【42页动态规划学习笔记分享】动态规划核心原理详解及27道LeetCode相关经典题目汇总
|
存储 算法 数据挖掘
力扣174题动态规划:地下城游戏(含模拟面试)
力扣174题动态规划:地下城游戏(含模拟面试)