题解 | #挤奶路径# java

挤奶路径

https://www.nowcoder.com/practice/6ab56cedae0646e19fb64b8bdbad82a6

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param cows int整型二维数组
     * @return int整型
     */
    public int uniquePathsWithObstacles (int[][] cows) {
        // write code here
        int n = cows.length;
        int m = cows[0].length;
        int[][] f = new int[n][m];

        for (int i = 0; i < n; i++) {
            if (cows[i][0] == 0)
                f[i][0] = 1;
            else
                break;
        }

        for (int i = 0; i < m; i++) {
            if (cows[0][i] == 0)
                f[0][i] = 1;
            else
                break;
        }

        for (int i = 1; i < n; i++) {
            for (int j = 1; j < m; j++) {
                if (cows[i][j] == 0) {
                    f[i][j] = f[i - 1][j] + f[i][j - 1];
                } else {
                    f[i][j] = 0;
                }
            }
        }

        return f[n - 1][m - 1];
    }
}

该代码使用的编程语言是Java。

该题主要表达了动态规划的思想。给定一个二维矩阵cows,其中0表示可通过的路径,1表示障碍物。需要计算从矩阵左上角到右下角的不同路径数量。每次只能向右或向下移动一步。

代码解释大纲:

  1. 创建一个二维数组f来保存路径数量。该数组的行数和列数与输入的二维数组cows相同。
  2. 初始化f数组的边界情况:对于第一行和第一列,如果当前位置为可通过的路径(0),则将f数组对应位置置为1,表示只有一条路径可以到达该位置。如果在第一行或第一列中遇到障碍物(1),则后续位置都无法到达,直接跳出循环。
  3. 从第二行第二列开始,使用动态规划的思想计算路径数量:如果当前位置为可通过的路径(0),则该位置的路径数量等于其上方位置和左侧位置的路径数量之和,即f[i][j] = f[i-1][j] + f[i][j-1]。如果当前位置为障碍物(1),则路径数量为0,即f[i][j] = 0。
  4. 返回f数组右下角元素的路径数量,即f[n-1][m-1],其中n为数组的行数,m为数组的列数。
全部评论

相关推荐

用户64975461947315:这不很正常吗,2个月开实习证明,这个薪资也还算合理,深圳Java好多150不包吃不包住呢,而且也提前和你说了没有转正机会,现在贼多牛马公司骗你说毕业转正,你辛辛苦苦干了半年拿到毕业证,后面和你说没hc了😂
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务