动态规划-杨辉三角

news/2024/11/14 14:50:07/

动态规划-杨辉三角

  • 1 [杨辉三角]
    • 1.1 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。
    • 1.2 示例
      • 1.2.1 示例 1:
      • 1.2.2 示例 2:
      • 1.2.3 提示:
    • 1.3 算法解决方法
      • 1.3.1 算法解题思路
        • 1.3.1.1 确定状态
        • 1.3.1.2 转移方程
        • 1.3.1.3 初始条件以及边界情况
        • 1.3.1.4 计算顺序
      • 1.3.2 算法实现
  • 2 [杨辉三角 II]
    • 2.1 给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。
    • 2.2 示例
      • 2.2.1 示例 1:
      • 2.2.2 示例 2:
      • 2.2.3 示例 3:
      • 2.2.4 提示:
    • 2.3 算法解决方法
      • 2.3.1 算法解题思路
        • 2.3.1.1 确定状态
        • 2.3.1.2 转移方程
        • 2.3.1.3 初始条件以及边界情况
        • 2.3.1.4 计算顺序
      • 2.3.2 算法实现

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

1 [杨辉三角]

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

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

在这里插入图片描述

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 行。

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

在这里插入图片描述

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]

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];}
};

http://www.ppmy.cn/news/746449.html

相关文章

iOS 13 绕过锁屏密码漏洞

iOS 13 很快就要发布了&#xff0c;在未正式发布之前&#xff0c;西班牙的安全研究员 Jose Rodriguez 公开了一个漏洞&#xff0c;能够查绕过锁屏密码查看通讯录、照片、短信。 在 iOS 设备上&#xff0c;当屏幕锁定时&#xff0c;用户无法查看设备中保存的信息&#xff0c;比如…

华为机试之简单密码

简单密码 1>题目描述2>解法 1>题目描述 密码是我们生活中非常重要的东东&#xff0c;我们的那么一点不能说的秘密就全靠它了。哇哈哈. 接下来渊子要在密码之上再加一套密码&#xff0c;虽然简单但也安全。假设渊子原来一个BBS上的密码为zvbo9441987,为了方便记忆&…

【华为OD机试】1028 - 密码截取

文章目录 一、题目&#x1f538;题目描述&#x1f538;输入输出&#x1f538;样例1&#x1f538;样例2&#x1f538;样例3 二、代码参考 作者&#xff1a;KJ.JK &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f…

绕过手机锁屏

进入fastboot模式&#xff0c;刷入recovery fastboot flash recovery twrp-3.0.2-0-hammerhead.img 然后进入recovery 进入后再用adb命令可以看见所有的文件目录 进入data/system目录下 可以看见以“ .key”结尾的文件 全部删除 作者&#xff1a;峰峰小 链接&#xff1…

华为机试 简单密码

题目描述 密码是我们生活中非常重要的东东&#xff0c;我们的那么一点不能说的秘密就全靠它了。哇哈哈. 接下来渊子要在密码之上再加一套密码&#xff0c;虽然简单但也安全。 假设渊子原来一个BBS上的密码为zvbo9441987,为了方便记忆&#xff0c;他通过一种算法把这个密码变换…

华为机试HJ32:密码截取

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 题目描述&#xff1a; 该题目是一道密码加密题&#xff0c;密码混合在复杂字符串中&#xff0c;是一个对称子字符串&#xff0c…

【云原生|Kubernetes】12-容器生命周期的回调(PreStart和PreStop)

【云原生|Kubernetes】12-容器生命周期的回调&#xff08;PreStart和PreStop&#xff09; 文章目录 【云原生|Kubernetes】12-容器生命周期的回调&#xff08;PreStart和PreStop&#xff09;简介回调函数回调处理程序的实现回调处理程序执行调试回调函数 为容器的生命周期事件设…

【LeetCode周赛】2022上半年题目精选集——思维题

文章目录 2211. 统计道路上的碰撞次数&#xff08;栈 || 脑筋急转弯&#xff09;解法1&#xff1a;自己想的——使用栈解法2——思维&#xff1a;去掉左右两边往左右开的车代码写法1——找左右端点代码写法2——正则表达式去除流处理api补充&#xff1a;replaceAll() 和 正则表…