题解 | #挤奶路径#

挤奶路径

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

知识点:动态规划

思路:

  1. 首先判断起点是否为障碍物,如果是,则返回路径数量为0。
  2. 获取矩阵的行数n和列数m。
  3. 创建一个大小为n行m列的新矩阵dp,用于存储到达每个位置的路径数量。
  4. 将起点dp[0][0]设置为1,表示到达起点的路径数量为1。
  5. 使用双重循环遍历每个位置(i,j),从左上角开始到右下角。
  6. 对于每个位置(i,j),如果该位置为障碍物,则跳过当前循环。
  7. 否则,根据状态转移方程计算dp[i][j]的值:如果i > 0,说明上方位置可达,将上方位置的路径数量dp[i-1][j]加到dp[i][j]上。如果j > 0,说明左方位置可达,将左方位置的路径数量dp[i][j-1]加到dp[i][j]上。
  8. 循环结束后,dp[n-1][m-1]即为从起点到终点的路径数量。
  9. 返回dp[n-1][m-1]作为结果。

编程语言:java

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param cows int整型二维数组
     * @return int整型
     */
    public int uniquePathsWithObstacles(int[][] cows) {
        if (cows[0][0] == 1) return 0;
        int n = cows.length, m = cows[0].length;
        int[][] dp = new int[n][m];
        dp[0][0] = 1;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (cows[i][j] == 1) continue;
                if (i > 0) dp[i][j] += dp[i - 1][j];
                if (j > 0) dp[i][j] += dp[i][j - 1];
            }
        }
        return dp[n - 1][m - 1];
    }
}

全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务