import java.util.*;


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

        int[][] result = new int[m][n];

        // 遍历矩阵,将水洼所在的行和列标记为-1
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (matrix[i][j] == 0) {
                    for (int k = 0; k < m; k++) {
                        result[k][j] = -1;
                    }
                    for (int k = 0; k < n; k++) {
                        result[i][k] = -1;
                    }
                }
            }
        }

        // 标记未被牛吃掉的草地为matrix中非0的元素
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (result[i][j] != -1) {
                    result[i][j] = matrix[i][j];
                }
            }
        }

        return result;
    }
}

Java代码

这道题主要涉及到矩阵的遍历和标记。

知识点:

  1. 矩阵遍历:
  2. 条件判断

代码解释:

  1. 初始化矩阵的行数和列数。
  2. 创建一个新的二维数组 result,用于存储结果。
  3. 第一个嵌套循环用于遍历原始矩阵,找到水洼所在的行和列,并在 result 数组中标记为-1。
  4. 第二个嵌套循环遍历 result 数组,将未被牛吃掉的草地标记为对应的原始矩阵元素值。
  5. 返回标记后的 result 数组作为结果。