题解 | #挤奶路径2#

挤奶路径2

https://www.nowcoder.com/practice/4d315070d57b40bea7a8586793d656bc

考察的知识点:动态规划;

解答方法分析:

  1. 函数uniquePathsWithCows首先判断输入的矩阵cows是否为空或者其中的行或列是否为空,如果是,则返回0。调用dfs函数进行DFS搜索,初始时,行和列的引都是0,hasCow参数为false。
  2. dfs函数首先获取输入矩阵的维度m和n。然后,它查当前坐标(row,col)是否超出矩阵范围或者是否遇到了障碍物,如果是,则返回0。如果当前位置上有一头牛,则将hasCow参数标记为true。
  3. 检查当前坐标是否为终点,且hasCow为true,如果是,则返回1,表示找到了一条符合条件的路径。
  4. 递归调用dfs函数,分别向下和向右移动,并将hasCow参数传递下去,计算从下一格和右一格出发的路径数量,然后将两者相加作为当前格子的所有可能路径数量,并返回这个值。
  5. 函数uniquePathsWithCows返回dfs函数的结果,即起点到终点的所有路径数量。

所用编程语言:C++;

完整编程代码:↓

class Solution {
  public:
    int dfs(vector<vector<int>>& grid, int row, int col, bool hasCow) {
        int m = grid.size();
        int n = grid[0].size();
        if (row < 0 || row >= m || col < 0 || col >= n || grid[row][col] == 1) {
            return 0;
        }
        if (grid[row][col] == 2) {
            hasCow = true;
        }
        if (row == m - 1 && col == n - 1 && hasCow) {
            return 1;
        }
        int downPaths = dfs(grid, row + 1, col, hasCow);
        int rightPaths = dfs(grid, row, col + 1, hasCow);
        return downPaths + rightPaths;
    }
    int uniquePathsWithCows(vector<vector<int> >& cows) {
        if (cows.empty() || cows[0].empty()) {
            return 0;
        }
        return dfs(cows, 0, 0, false);
    }
};

全部评论

相关推荐

爱睡觉的冰箱哥:你是我今晚见过的最美的牛客女孩
点赞 评论 收藏
分享
08-07 11:58
门头沟学院 Java
投实习的时候大厂只有你给面现在攻守易型了是吧挂的这么果断,连面都不给...
迷茫的大四🐶:实习是实习,正职是正职,两码事,实习也就几个月,卡的少,正职可就得狠狠地卡了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务