题解 | #挤奶路径2# java
挤奶路径2
https://www.nowcoder.com/practice/4d315070d57b40bea7a8586793d656bc
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param cows int整型二维数组 * @return int整型 */ public int dfs(int[][] grid, int row, int col, boolean hasCow) { int m = grid.length; int n = grid[0].length; 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; } public int uniquePathsWithCows(int[][] cows) { if (cows.length == 0 || cows[0].length == 0) { return 0; } return dfs(cows, 0, 0, false); } }
该代码使用的编程语言是Java。
该题主要涉及了深度优先搜索(DFS)算法和二维数组的遍历。给定一个二维矩阵cows,其中0表示可通过的路径,1表示障碍物,2表示奶牛。需要计算从矩阵的左上角到右下角的路径数量,要求经过至少一只奶牛。
代码解释大纲:
- 创建一个dfs方法用于深度优先搜索:如果当前位置越界或者遇到障碍物,返回0表示没有路径。如果当前位置有奶牛,将hasCow标记为true。如果到达右下角,且经过奶牛位置,返回1表示找到一条有效路径。分别计算向下和向右的路径数量,递归调用dfs方法。返回总的路径数量,即向下和向右路径数量之和。
- 创建uniquePathsWithCows方法用于调用dfs方法计算路径数量:如果输入的二维数组为空,直接返回0。调用dfs方法,初始位置为左上角(0, 0),hasCow初始值为false。返回最终的路径数量。
- 以上是根据题目中给出的代码进行的修改,包括参数类型转换和一些语法调整。