LeetCode题解(1594):矩阵从左上移动到右下的最大非负积(Python)
题目:原题链接(中等)
标签:贪心算法、动态规划
解法 | 时间复杂度 | 空间复杂度 | 执行用时 |
---|---|---|---|
Ans 1 (Python) | O(N×M)O(N×M)O(N×M) | O(N×M)O(N×M)O(N×M) | 44ms (98%) |
Ans 2 (Python) | |||
Ans 3 (Python) |
解法一(动态规划):
class Solution:def maxProductPath(self, grid: List[List[int]]) -> int:if not grid or not grid[0]:return -1N1, N2 = len(grid), len(grid[0])dp = [[(None, None)] * N2 for _ in range(N1)]if grid[0][0] > 0:dp[0][0] = (grid[0][0], None)elif grid[0][0] == 0:dp[0][0] = (0, 0)else:dp[0][0] = (None, grid[0][0])# 处理第1列for i in range(1, N1):if grid[i][0] > 0:n1 = dp[i - 1][0][0] * grid[i][0] if dp[i - 1][0][0] is not None else Nonen2 = dp[i - 1][0][1] * grid[i][0] if dp[i - 1][0][1] is not None else Nonedp[i][0] = (n1, n2)elif grid[i][0] == 0:dp[i][0] = (0, 0)else:n1 = dp[i - 1][0][1] * grid[i][0] if dp[i - 1][0][1] is not None else Nonen2 = dp[i - 1][0][0] * grid[i][0] if dp[i - 1][0][0] is not None else Nonedp[i][0] = (n1, n2)# 处理第1行for j in range(1, N2):if grid[0][j] > 0:n1 = dp[0][j - 1][0] * grid[0][j] if dp[0][j - 1][0] is not None else Nonen2 = dp[0][j - 1][1] * grid[0][j] if dp[0][j - 1][1] is not None else Nonedp[0][j] = (n1, n2)elif grid[0][j] == 0:dp[0][j] = (0, 0)else:n1 = dp[0][j - 1][1] * grid[0][j] if dp[0][j - 1][1] is not None else Nonen2 = dp[0][j - 1][0] * grid[0][j] if dp[0][j - 1][0] is not None else Nonedp[0][j] = (n1, n2)# 处理其他部分for i in range(1, N1):for j in range(1, N2):if grid[i][j] > 0:n11 = dp[i - 1][j][0] * grid[i][j] if dp[i - 1][j][0] is not None else Nonen12 = dp[i][j - 1][0] * grid[i][j] if dp[i][j - 1][0] is not None else Noneif n11 is not None and n12 is not None:n1 = max(n11, n12)elif n11 is not None:n1 = n11elif n12 is not None:n1 = n12else:n1 = Nonen21 = dp[i - 1][j][1] * grid[i][j] if dp[i - 1][j][1] is not None else Nonen22 = dp[i][j - 1][1] * grid[i][j] if dp[i][j - 1][1] is not None else Noneif n21 is not None and n22 is not None:n2 = min(n21, n22)elif n21 is not None:n2 = n21elif n22 is not None:n2 = n22else:n2 = None# print("(", i, ",", j, ")", grid[i][j], "->", n11, n12, n21, n22)dp[i][j] = (n1, n2)elif grid[i][j] == 0:dp[i][j] = (0, 0)else:n11 = dp[i - 1][j][1] * grid[i][j] if dp[i - 1][j][1] is not None else Nonen12 = dp[i][j - 1][1] * grid[i][j] if dp[i][j - 1][1] is not None else Noneif n11 is not None and n12 is not None:n1 = max(n11, n12)elif n11 is not None:n1 = n11elif n12 is not None:n1 = n12else:n1 = Nonen21 = dp[i - 1][j][0] * grid[i][j] if dp[i - 1][j][0] is not None else Nonen22 = dp[i][j - 1][0] * grid[i][j] if dp[i][j - 1][0] is not None else Noneif n21 is not None and n22 is not None:n2 = min(n21, n22)elif n21 is not None:n2 = n21elif n22 is not None:n2 = n22else:n2 = None# print("(", i, ",", j, ")", grid[i][j], "->", n11, n12, n21, n22, "->", n1, n2)dp[i][j] = (n1, n2)# for l in dp:# print(l)if dp[-1][-1][0] is not None:return dp[-1][-1][0] % (10 ** 9 + 7)else:return -1
LeetCode题解(1594):矩阵从左上移动到右下的最大非负积(Python)相关推荐
- LeetCode题解:矩阵中战斗力最弱的 K 行
矩阵中战斗力最弱的 K 行 一.题目 给你一个大小为 m * n 的矩阵 mat,矩阵由若干军人和平民组成,分别用 1 和 0 表示. 请你返回矩阵中战斗力最弱的 k 行的索引,按从最弱到最强排序. ...
- LeetCode题解(1443):收集无向树中所有苹果的最少移动距离(Python)
题目:原题链接(中等) 标签:树.深度优先搜索.图.图-无向图 解法 时间复杂度 空间复杂度 执行用时 Ans 1 (Python) O(N+E)O(N+E)O(N+E) : 其中E为边数 O(N+E ...
- LeetCode:螺旋矩阵【54】
LeetCode:螺旋矩阵[54] 题目描述 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [[ 1, 2, 3 ],[ ...
- LeetCode题解目录
最新更新于2020.11.27 前往LeetCode主页. 前往GitHub源码.(服务器原因,暂停同步.) 前往码云主页. 已解决 456/1878 - 简单353 中等 90 困难 13 2020 ...
- leetcode 题解 (500-1000题,持续更新,part 2)
part1(1-500), part3(1000-*) 502. IPO 题意:给定k,w,profits数组和capital数组.k表示最多可完成的任务数.w是初始资本.profits是各个任务的收 ...
- 900 多道 LeetCode 题解,这个 GitHub 项目值得 Star!
转自 | 码农有道 大家好,我是小 G. 周末风和日丽,适合刷 LeetCode 今天给你们推荐个 GitHub 项目,里面收集了 900 多道 LeetCode 题解,并包含中英文两个版本,适合大多 ...
- PHP版Leetcode题解开始随缘更新
2019独角兽企业重金招聘Python工程师标准>>> PHP版Leetcode题解 我叫skys215,是一名bug工程师. 我接触编程的时间比较早,但是因为我数学不好加上比较懒, ...
- [LeetCode 题解]: Binary Tree Preorder Traversal
前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 Given a binary ...
- LeetCode 题解汇总
为什么80%的码农都做不了架构师?>>> LeetCode 题解汇总 转载于:https://my.oschina.net/michao/blog/801863
最新文章
- 高性能千万级定时任务管理服务forsun使用详解
- weka: FCBFSearch
- Nacos 发布 v0.8.0 Pre-GA版本,安全稳定上生产
- SS CMS 全新跨平台 V7.0 版本正式发布
- Codeforces Round #694 Div. 2
- aop 代码_项目学生:使用AOP简化代码
- 保存时间 默认_操作技能|WORD文档没保存,有办法恢复吗?
- 面试常问的深度学习(DNN、CNN、RNN)的相关问题
- win7 下 java 环境变量配置
- Proxyee-down – 百度网盘全平台满速下载神器,还带有IDM的全网嗅探功能
- 深信服校园招聘安全攻防A卷
- 数据库作业4——数据查询
- 计算机网络存在的漏洞,常见的计算机网络安全漏洞有哪些
- 学习博士答辩之后的感想:
- 认证学习4 - Bearer认证(Token认证)讲解、代码实现、演示
- 如何优雅的用Axure绘制高保真原型心得分享
- JavaScript最简单的方法实现简易的计算器
- if-else过多,使用策略模式(Strategy)解决if-else乱象
- Qt超强绘图QCustomplot 动态图静态图时间坐标轴
- No adapter attached; skipping layout