知识点:二维动态规划
首先理解一下题目,我们要从左上角移动至右下角,得到最小的元素值之积,题目已说明,可以向上下左右移动,但是,题目数据范围说明,不存在元素值小于等于0的元素,故向上或向左并不是最佳的路线,也并不会降低元素值的乘积,甚至会增大,故我们只需要考虑向右和向下两种情况即可。每一步定义为到达当前位置时,所得到的最小元素积,所以我们只需要取上方和左方元素积的最小值,累乘至右下角即为最终答案。
Java题解如下
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param cows int整型二维数组 * @return long长整型 */ public long minPathProduct (int[][] cows) { // write code here int m = cows.length, n = cows[0].length; long[][] dp = new long[m][n]; dp[0][0] = cows[0][0]; for(int i = 1; i < m; i++) { dp[i][0] = dp[i - 1][0] * cows[i][0]; } for(int i = 1; i < n; i++) { dp[0][i] = dp[0][i - 1] * cows[0][i]; } for(int i = 1; i < m; i++) { for(int j = 1; j < n; j++) { dp[i][j] = cows[i][j] * Math.min(dp[i][j - 1], dp[i - 1][j]); } } return dp[m - 1][n - 1]; } }