动态规划-杨辉三角

这篇具有很好参考价值的文章主要介绍了动态规划-杨辉三角。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

该算法题分别是:
118. 杨辉三角。
119. 杨辉三角 II

1 [杨辉三角]

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

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

动态规划-杨辉三角,动态规划专题,动态规划,算法,动态规划-杨辉三角,杨辉三角,杨辉三角 II

1.2 示例

1.2.1 示例 1:

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

1.2.2 示例 2:

输入: numRows = 1
输出: [[1]]

1.2.3 提示:

1 <= numRows <= 30

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/pascals-triangle
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

1.3 算法解决方法

1.3.1 算法解题思路

1.3.1.1 确定状态
  • 设dp[i][j]表示第1 + 1行,第j + 1列的数
    dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1];
1.3.1.2 转移方程
  • 设dp[i][j]表示第1 + 1行,第j + 1列的数
    dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1];
1.3.1.3 初始条件以及边界情况
  • 设dp[i][j]表示第1 + 1行,第j + 1列的数
    dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1];

初始条件:
dp[0][0] = 1

边界情况:
dp[i][0] = dp[i][i] = 1;

1.3.1.4 计算顺序

dp[0][0]
dp[1][0],dp[1][1]

dp[N - 1][0],dp[N - 1][N - 1]

1.3.2 算法实现

class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        vector<vector<int>> dp(numRows);
        for(int i = 0; i < numRows; i++) {
            dp[i].resize(i + 1);
            dp[i][0] = dp[i][i] = 1;
        }

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

        return dp;
    }
};

2 [杨辉三角 II]

2.1 给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。

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

动态规划-杨辉三角,动态规划专题,动态规划,算法,动态规划-杨辉三角,杨辉三角,杨辉三角 II

2.2 示例

2.2.1 示例 1:

输入: rowIndex = 3
输出: [1,3,3,1]

2.2.2 示例 2:

输入: rowIndex = 0
输出: [1]

2.2.3 示例 3:

输入: rowIndex = 1
输出: [1,1]

2.2.4 提示:

0 <= rowIndex <= 33

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/pascals-triangle-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2.3 算法解决方法

杨辉三角 II完全可以借助于上面的杨辉三角的解决方法去处理,不同的是要处理index和杨辉三角的关系,最后返回特定行的杨辉三角数据就可以。

2.3.1 算法解题思路

2.3.1.1 确定状态
  • 设dp[i][j]表示第1 + 1行,第j + 1列的数
    dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1];
2.3.1.2 转移方程
  • 设dp[i][j]表示第1 + 1行,第j + 1列的数
    dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1];
2.3.1.3 初始条件以及边界情况
  • 设dp[i][j]表示第1 + 1行,第j + 1列的数
    dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1];

初始条件:
dp[0][0] = 1

边界情况:
dp[i][0] = dp[i][i] = 1;

2.3.1.4 计算顺序

dp[0][0]
dp[1][0],dp[1][1]

dp[N - 1][0],dp[N - 1][N - 1]

返回第N- 1行的数据:
dp[N - 1][0],dp[N - 1][N - 1]文章来源地址https://www.toymoban.com/news/detail-537488.html

2.3.2 算法实现

class Solution {
public:
    vector<int> getRow(int rowIndex) {
        int numRows = rowIndex + 1;
        vector<vector<int>> dp(numRows);
        for(int i = 0; i < numRows; i++) {
            dp[i].resize(i + 1);
            dp[i][0] = dp[i][i] = 1;
        }

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

        return dp[rowIndex];

    }
};

到了这里,关于动态规划-杨辉三角的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [LeetCode] #118 杨辉三角

    给定一个非负整数  numRows , 生成「杨辉三角」的前  numRows   行。 在「杨辉三角」中, 每个数是它左上方和右上方的数的和。 杨辉三角:  

    2024年02月15日
    浏览(25)
  • 【LeetCode】118. 杨辉三角

    题目链接 直觉解法: 以下的理论介绍 可以说和 本题的 代码实现 毫无关系。 这个版本 需要注意 列表的边界 思路: 前一行 两端 补0 模拟。 结合 动图 理解 题目 说明至少 一行,可以跳过 第一行的处理 官方版本

    2024年02月07日
    浏览(27)
  • 每日一题,杨辉三角

    给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 示例 1: 示例 2:

    2024年02月04日
    浏览(29)
  • C练习——杨辉三角

    题目: 打印近似杨辉三角,行数n自选 百度找的杨辉三角,参考一下: 解析: 把它的全部元素左对齐,就可以看成近似杨辉三角的样子 1 1  1 1  2  1 1  3  3  1 1  4  6  4  1 ……  每个数等于它上方两数之和 每行数字左右对称,由1开始逐渐变大 行数与列数相同,第n行有

    2024年01月17日
    浏览(28)
  • 杨辉三角(Java)

     实现思路:我们可以先把杨辉三角想象成一个空的二维数组,然后再给它赋值输出即可。 关键在于如何赋值:仔细观察上图可以得出除了 每一行第一个数以及最后一个数(都是1) , 中间的数字规律就是: a[ i ][ j ] = a[ i - 1 ][ j - 1 ] + a[ i - 1 ][ j ] 实现代码: 相信大家更多的

    2024年02月08日
    浏览(26)
  • 打印杨辉三角

    这个公式,不好算,我觉得还是杨辉三角算起来方便:c#代码如下:    double 打印杨辉三角(int n)//n必须是偶数,展开项是n+1,中间项是n/2,此处返回中间项的概率202306131722         {             //for (int i = 0; i n; i++)             //{             //    //这种方法直接算,使

    2024年02月09日
    浏览(28)
  • 【C语言】-- 杨辉三角

    目录 一.什么是杨辉三角? 二.实现方法 1.直角三角形版 2.等腰三角形版 杨辉三角形,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。 形如: 我们不难看出其存在明显的规律。 即:图片的 两个斜边都是数字1 , 其余的数都等于 它所在层的肩上(

    2024年02月13日
    浏览(36)
  • LC-杨辉三角-记忆版

    上一篇:LC-杨辉三角 上一篇讲了杨辉三角的算法,不过之前的算法存在一个问题,比如: 我们可以看到计算a[5][3]和a[5][4]时都需要a[4][3]的值,之前我们是需要每次用到都重新计算,这样就比较耗时,有没有办法记住已经算过的值呢,当下次用的时候直接获取就不用重新计算

    2024年02月13日
    浏览(25)
  • 【LeetCode】探索杨辉三角模型

    力扣原题 首先我们要来了解一下题目本身在说些什么,通过下方的动图我们可以更加清楚地看到杨辉三角是怎样一步步生成的。 给到的示例中我们通过输入杨辉三角的行数,然后通过计算得到这个杨辉三角的每一行是什么具体的数值 首先我们要做的第一件事就是去选择正确

    2024年02月14日
    浏览(29)
  • leetcode--杨辉三角(C、C++)

    2024年02月15日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包