62. 不同路径
题目描述:
一个机器人位于一个 m x n 网格的左上角(起始点在下图中标记为 “Start”)。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。
问总共有多少条不同的路径?
dp 五步曲:
- 定义dp数组、确定dp[i][j]含义
- int dp = new intm;
- dp[i][j]表示到达(i,j)路径的数量
- 递推公式:dp[i][j]= dp[i][j]- 1 + dp[i][j];
- 当前位置只能由其正上方和正左方过来
- 初始化
- 第一行、第一列全为 1
- if (i == 0 || j == 0) dp[i][j]= 1;
- 顺序:从上到下,从左到右
- 打印dp日志
63. 不同路径 II
题目描述:
一个机器人位于一个 m x n 网格的左上角(起始点在下图中标记为“Start”)。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径
这题和上题 62. 不同路径基本类似
区别在于两点:
- 碰到障碍物时:dp[i][j] = 0
- 初始化不同:如果第一行中间有障碍物了,则其后均不可达(其后dp0=0);第一列,同理
- 这里 carl哥初始化的相当巧妙
- 循环终止条件,一旦遇到obstacleGridi == 1的情况就停止dpi的赋值1的操作
- for (int i = 0; i < m && obstacleGrid[i][i] == 0; i++) dp[i][j] = 1;
343. 整数拆分
题目描述:
给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。返回你可以获得的最大乘积。
dp 五步曲:
- 定义dp数组、确定dp[i]含义
全站分卷索引 · 42 卷
- 1代码随想录知识星球精华(最强八股文)第五版(算法篇)
- 2找出所有子集的异或总和再求和
- 3哈希表
- 4哈希冲突
- 5红黑树与AVL树
- 6平衡二叉树(AVL树)
- 7将有序数组转换为二叉搜索树
- 83. 分割(组合问题)
- 9方法论
- 10509. 斐波那契数
- 1162. 不同路径
- 1296. 不同的二叉搜索树
- 13322. 零钱兑换
- 14爬楼梯
- 15背包小总结 (01背包、完全背包)
- 16子序列问题
- 17674. 最长连续递增序列
- 18115. 不同的子序列
- 19总结
- 20技巧总结
- 21时间序列模型
- 22区间DP模型
- 23664. 奇怪的打印机
- 24编辑距离
- 25回文串
- 26DP递推公式总结
- 27排序算法
- 28其他算法
- 294. 分别用递归和非递归方式实现二叉树先序、中序和后序遍历
- 302. TOP N问题
- 313. 分布式的TOP N问题
- 322. Astar数据结构 + 公式
- 334. 代码实现
- 345. 总体代码
- 35堆排序
- 36单源最短路
- 37思维导图
- 38链表
- 39回溯
- 40贪心
- 41动态规划
- 42排序