当前位置:   article > 正文

代码随想录算法训练营第三十二天

代码随想录算法训练营第三十二天

62. 不同路径

这道题自己思考ac出来了,主要是这道题需要使用二维的dp数组进行规划,由于动归是递推的,所以从结果向前思考,因此到右下角的方法只能由右下角这个格子或者左边这个格子走过来,因此右下角这个格子的方法数应该等于上一个格子的方法数加上左边这个格子的方法数。这就是递推的过程。值得注意的是只有一行的或者一列的每个格子都只有1种方法,还有就是多行多列的边界格子也是只有一种方法,这个也是要初始化的。自己写的代码如下:

  1. class Solution {
  2. public:
  3. int uniquePaths(int m, int n) {
  4. vector<vector<int>> dp(m, vector<int>(n));
  5. if (m == 1 || n == 1) return 1;
  6. dp[0][0] = 0;
  7. dp[0][1] = 1;
  8. dp[1][0] = 1;
  9. for (int i = 0; i < m; i++) {
  10. dp[i][0] = 1;
  11. }
  12. for (int i = 0; i < n; i++) {
  13. dp[0][i] = 1;
  14. }
  15. for (int i = 1; i < m; i++) {
  16. for (int j = 1; j < n; j++) {
  17. dp[i][j] = dp[i-1][j] + dp[i][j-1];
  18. }
  19. }
  20. return dp[m-1][n-1];
  21. }
  22. };

63. 不同路径 II

这道题比上道题只不过多了个障碍物,在初始化的时候和递推的要注意障碍物的处理就行了 

首先几个特殊情况 当障碍物在起点或者终点的话直接返回0;

然后初始化边界的时候在障碍物之前的都初始化为1,障碍物以及障碍物之后的都初始化为0 ;

接着循环过程中发现上个或左边的有障碍物的话使用0代替原来的方法数;完整代码如下:

  1. class Solution {
  2. public:
  3. int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
  4. int m = obstacleGrid.size();
  5. int n = obstacleGrid[0].size();
  6. if (m == 1) {
  7. for (int i = 0; i < n; i++) {
  8. if (obstacleGrid[0][i] == 1) return 0;
  9. }
  10. return 1;
  11. }
  12. if (n == 1) {
  13. for (int i = 0; i < m; i++) {
  14. if (obstacleGrid[i][0] == 1) return 0;
  15. }
  16. return 1;
  17. }
  18. if (obstacleGrid[m-1][n-1] == 1 || obstacleGrid[0][0] == 1) return 0;
  19. vector<vector<int>> dp(m, vector<int>(n, 0));
  20. dp[0][0] = 0;
  21. for (int i = 1; i < m; i++) {
  22. if (obstacleGrid[i][0] != 1) {
  23. dp[i][0] = 1;
  24. }
  25. else break;
  26. }
  27. for (int i = 1; i < n; i++) {
  28. if (obstacleGrid[0][i] != 1) {
  29. dp[0][i] = 1;
  30. }
  31. else break;
  32. }
  33. for (int i = 1; i < m; i++) {
  34. for (int j = 1; j < n; j++) {
  35. dp[i][j] = (obstacleGrid[i-1][j] == 1 ? 0 : dp[i-1][j]) + (obstacleGrid[i][j-1] == 1 ? 0 : dp[i][j-1]);
  36. }
  37. }
  38. return dp[m-1][n-1];
  39. }
  40. };

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/828515
推荐阅读
相关标签
  

闽ICP备14008679号