← 返回目录

62. 不同路径

第 11 / 42 卷日期:

题目描述:

一个机器人位于一个 m x n 网格的左上角(起始点在下图中标记为 “Start”)。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。

问总共有多少条不同的路径?

dp 五步曲:

  1. 定义dp数组、确定dp[i][j]含义
  2. int dp = new intm;
  3. dp[i][j]表示到达(i,j)路径的数量
  4. 递推公式:dp[i][j]= dp[i][j]- 1 + dp[i][j];
  5. 当前位置只能由其正上方和正左方过来
  6. 初始化
  7. 第一行、第一列全为 1
  8. if (i == 0 || j == 0) dp[i][j]= 1;
  9. 顺序:从上到下,从左到右
  10. 打印dp日志

63. 不同路径 II

题目描述:

一个机器人位于一个 m x n 网格的左上角(起始点在下图中标记为“Start”)。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。

现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径

这题和上题 62. 不同路径基本类似

区别在于两点:

  1. 碰到障碍物时:dp[i][j] = 0
  2. 初始化不同:如果第一行中间有障碍物了,则其后均不可达(其后dp0=0);第一列,同理
  3. 这里 carl哥初始化的相当巧妙
  4. 循环终止条件,一旦遇到obstacleGridi == 1的情况就停止dpi的赋值1的操作
  5. for (int i = 0; i < m && obstacleGrid[i][i] == 0; i++) dp[i][j] = 1;

343. 整数拆分

题目描述:

给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。返回你可以获得的最大乘积。

dp 五步曲:

  1. 定义dp数组、确定dp[i]含义
全站分卷索引 · 42 卷
  1. 1代码随想录知识星球精华(最强八股文)第五版(算法篇)
  2. 2找出所有子集的异或总和再求和
  3. 3哈希表
  4. 4哈希冲突
  5. 5红黑树与AVL树
  6. 6平衡二叉树(AVL树)
  7. 7将有序数组转换为二叉搜索树
  8. 83. 分割(组合问题)
  9. 9方法论
  10. 10509. 斐波那契数
  11. 1162. 不同路径
  12. 1296. 不同的二叉搜索树
  13. 13322. 零钱兑换
  14. 14爬楼梯
  15. 15背包小总结 (01背包、完全背包)
  16. 16子序列问题
  17. 17674. 最长连续递增序列
  18. 18115. 不同的子序列
  19. 19总结
  20. 20技巧总结
  21. 21时间序列模型
  22. 22区间DP模型
  23. 23664. 奇怪的打印机
  24. 24编辑距离
  25. 25回文串
  26. 26DP递推公式总结
  27. 27排序算法
  28. 28其他算法
  29. 294. 分别用递归和非递归方式实现二叉树先序、中序和后序遍历
  30. 302. TOP N问题
  31. 313. 分布式的TOP N问题
  32. 322. Astar数据结构 + 公式
  33. 334. 代码实现
  34. 345. 总体代码
  35. 35堆排序
  36. 36单源最短路
  37. 37思维导图
  38. 38链表
  39. 39回溯
  40. 40贪心
  41. 41动态规划
  42. 42排序