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

62. 不同路径

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

class Solution {
public:
    int uniquePaths(int m, int n) {
        vector<vector<int>> dp(m, vector<int>(n));
        if (m == 1 || n == 1) return 1;
        dp[0][0] = 0;
        dp[0][1] = 1;
        dp[1][0] = 1;
        for (int i = 0; i < m; i++) {
            dp[i][0] = 1;
        }
        for (int i = 0; i < n; i++) {
            dp[0][i] = 1;
        }
        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                dp[i][j] = dp[i-1][j] + dp[i][j-1];
            }
        }
        return dp[m-1][n-1];

    }
};

63. 不同路径 II

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

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

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

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

class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        int m = obstacleGrid.size();
        int n = obstacleGrid[0].size();
        if (m == 1) {
            for (int i = 0; i < n; i++) {
                if (obstacleGrid[0][i] == 1) return 0;
            }
            return 1;
        }
        if (n == 1) {
            for (int i = 0; i < m; i++) {
                if (obstacleGrid[i][0] == 1) return 0;
            }
            return 1;
        }
        if (obstacleGrid[m-1][n-1] == 1 || obstacleGrid[0][0] == 1) return 0;
        vector<vector<int>> dp(m, vector<int>(n, 0));
        dp[0][0] = 0;
        for (int i = 1; i < m; i++) {
            if (obstacleGrid[i][0] != 1) {
                dp[i][0] = 1;
            }
            else break;
        }
        for (int i = 1; i < n; i++) {
            if (obstacleGrid[0][i] != 1) {
                dp[0][i] = 1;
            }
            else break;
        }
        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                dp[i][j] = (obstacleGrid[i-1][j] == 1 ? 0 : dp[i-1][j]) + (obstacleGrid[i][j-1] == 1 ? 0 : dp[i][j-1]);
            }
        }
        return dp[m-1][n-1];
    }
};

相关推荐

  1. 代码随想算法训练

    2024-07-15 14:16:02       36 阅读
  2. 代码随想算法训练|leetcode738题

    2024-07-15 14:16:02       43 阅读
  3. 代码随想算法训练

    2024-07-15 14:16:02       26 阅读
  4. 代码随想算法训练|leetcode62、63题

    2024-07-15 14:16:02       34 阅读
  5. 代码随想算法训练|leetcode416题

    2024-07-15 14:16:02       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 14:16:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 14:16:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 14:16:02       58 阅读
  4. Python语言-面向对象

    2024-07-15 14:16:02       69 阅读

热门阅读

  1. 【并发编程】CPU & IO 密集型

    2024-07-15 14:16:02       17 阅读
  2. python中逻辑运算符and 和 or 的优先级问题。

    2024-07-15 14:16:02       21 阅读
  3. Android 中处理 RGB24 格式数据

    2024-07-15 14:16:02       24 阅读
  4. Teamhelper现已兼容20余款主流AR硬件

    2024-07-15 14:16:02       19 阅读
  5. Spring MVC-07

    2024-07-15 14:16:02       22 阅读
  6. KeyCode键盘按键码表

    2024-07-15 14:16:02       25 阅读
  7. Buffer模块(nodejs)

    2024-07-15 14:16:02       22 阅读
  8. XML 编辑器:功能、选择与使用技巧

    2024-07-15 14:16:02       21 阅读
  9. 代码随想录算法训练营Day69|自我总结

    2024-07-15 14:16:02       31 阅读
  10. 数据库隔离级别RC,什么场景会有间隙锁?

    2024-07-15 14:16:02       26 阅读