1594. 矩阵的最大非负积-深度优先遍历
遍历 深度 最大 矩阵 优先
2023-09-14 09:06:52 时间
1594. 矩阵的最大非负积-深度优先遍历
给你一个大小为 rows x cols 的矩阵 grid 。最初,你位于左上角 (0, 0) ,每一步,你可以在矩阵中 向右 或 向下 移动。
在从左上角 (0, 0) 开始到右下角 (rows - 1, cols - 1) 结束的所有路径中,找出具有 最大非负积 的路径。路径的积是沿路径访问的单元格中所有整数的乘积。
返回 最大非负积 对 109 + 7 取余 的结果。如果最大积为负数,则返回 -1 。
注意,取余是在得到最大积之后执行的。
示例 1:
输入:grid = [[-1,-2,-3],
[-2,-3,-3],
[-3,-3,-2]]
输出:-1
解释:从 (0, 0) 到 (2, 2) 的路径中无法得到非负积,所以返回 -1
示例 2:
输入:grid = [[1,-2,1],
[1,-2,1],
[3,-4,1]]
输出:8
解释:最大非负积对应的路径已经用粗体标出 (1 * 1 * -2 * -4 * 1 = 8)
示例 3:
输入:grid = [[1, 3],
[0,-4]]
输出:0
解释:最大非负积对应的路径已经用粗体标出 (1 * 0 * -4 = 0)
示例 4:
输入:grid = [[ 1, 4,4,0],
[-2, 0,0,1],
[ 1,-1,1,1]]
输出:2
解释:最大非负积对应的路径已经用粗体标出 (1 * -2 * 1 * -1 * 1 * 1 = 2)
这一题,采用深度优先遍历是可以的,最好加个记忆化搜索,我这里没加,解题代码如下:
int re;
void dfs(int **grid,int m,int n,int x_now,int y_now,long long val,int **r){
int direction[4][2]={{0,1},{1,0}};
// printf("%d %d %d |",x_now,y_now,val);
if(x_now==m-1&&y_now==n-1&&val>=0){
re=fmax(re,val);
}
for(int i=0;i<2;i++){
int x_next=x_now+direction[i][0];
int y_next=y_now+direction[i][1];
if(x_next>=0&&x_next<m&&y_next>=0&&y_next<n){
// printf("%d %d ",x_next,y_next);
dfs(grid,m,n,x_next,y_next,val*grid[x_next][y_next],r);
}
}
}
int maxProductPath(int** grid, int gridSize, int* gridColSize){
int n=gridColSize[0],m=gridSize;
int **r=(int **)malloc(sizeof(int *)*m);
re=-1;
for(int i=0;i<m;i++){
r[i]=(int *)malloc(sizeof(int )*n);
for(int j=0;j<n;j++){
r[i][j]=0;
}
}
long long a=grid[0][0];
dfs(grid,m,n,0,0,a,r);
return re%1000000007;
}
相关文章
- Java实现 LeetCode 145 二叉树的后序遍历
- Lintcode---中序遍历和后序遍历树构造二叉树
- Java 集合之Collection 接口和遍历方法
- 589. N 叉树的前序遍历
- LeetCode-386. 字典序排数【深度优先遍历,递归】
- linux shell带索引下标遍历数组
- go基本语法:channel未关闭遍历结束后会报错deadlock
- 如何在JavaScript中循环遍历JSON响应?
- uni——foreach遍历 创建对象数组
- DFS(深度搜索)无向图遍历(JAVA手把手深入解析)
- swift-for循环遍历,遍历字典,循环生成数组
- 【LeetCode 中等 树 python3】144. 二叉树的前序遍历
- 1550. 存在连续三个奇数的数组-遍历
- 1905. 统计子岛屿-深度优先遍历图
- 1448. 统计二叉树中好节点的数目-深度优先遍历+最大值传递
- 637. 二叉树的层平均值-深度优先遍历+层次遍历-力扣双百代码
- 2331. 计算布尔二叉树的值-深度优先遍历
- 22. 括号生成-深度优先遍历
- 1306. 跳跃游戏 III-反向求解和广度优先遍历
- 1339. 分裂二叉树的最大乘积-深度优先遍历
- 2369. 检查数组是否存在有效划分-dfs深度优先遍历算法
- 面试题 04.02. 最小高度树-深度优先遍历,加树的分治法
- 力扣之图的遍历
- 数据结构(五)图---图的两种遍历(深度优先和广度优先)