题解 | #最小体重积# java
最小体重积
https://www.nowcoder.com/practice/0980f806727e48f3b0253243416038c0
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param cows int整型二维数组 * @return long长整型 */ public long minPathProduct(int[][] cows) { // 获取矩阵的行数和列数 int m = cows.length; int n = cows[0].length; // 如果矩阵只有一个元素,直接返回该元素的值 if (m == 1 && n == 1) { return cows[0][0]; } // 创建一个二维数组f,用于记录到达每个位置的最小路径乘积 long[][] f = new long[m][n]; // 初始化第一行和第一列的路径乘积 f[0][0] = cows[0][0]; for (int i = 1; i < m; ++i) { f[i][0] = f[i - 1][0] * cows[i][0]; } for (int j = 1; j < n; ++j) { f[0][j] = f[0][j - 1] * cows[0][j]; } // 计算到达每个位置的最小路径乘积 for (int i = 1; i < m; ++i) { for (int j = 1; j < n; ++j) { f[i][j] = Math.min(f[i - 1][j], f[i][j - 1]) * cows[i][j]; } } // 返回到达右下角位置的最小路径乘积 return f[m - 1][n - 1]; } }
该代码使用的编程语言是Java。
它考察了动态规划的知识点。
下面是代码的文字解释大纲:
- 定义了一个名为
Solution
的类。 - 在类中,声明了一个公有的长整型方法
minPathProduct
,该方法接受一个二维整型向量cows
作为参数,并返回一个长整型值。 - 方法内部,先获取二维向量
cows
的行数m
和列数n
。 - 如果
m
和n
都为1,则直接返回cows
中唯一的元素。 - 创建一个二维向量
f
,用于记录到达每个位置的最小路径乘积,初始化为全0。 - 对于第一行和第一列的元素,最小路径乘积等于前一个位置的最小路径乘积乘以当前位置的值。
- 使用动态规划的思想,计算其他位置的最小路径乘积。对于每个位置
f[i][j]
,它的最小路径乘积等于上方位置f[i-1][j]
和左方位置f[i][j-1]
中较小的乘积再乘以当前位置的值。 - 返回右下角位置
f[m-1][n-1]
的最小路径乘积作为结果。