题目:原题链接(中等)

标签:贪心算法、动态规划

解法 时间复杂度 空间复杂度 执行用时
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)相关推荐

  1. LeetCode题解:矩阵中战斗力最弱的 K 行

    矩阵中战斗力最弱的 K 行 一.题目 给你一个大小为 m * n 的矩阵 mat,矩阵由若干军人和平民组成,分别用 1 和 0 表示. 请你返回矩阵中战斗力最弱的 k 行的索引,按从最弱到最强排序. ...

  2. LeetCode题解(1443):收集无向树中所有苹果的最少移动距离(Python)

    题目:原题链接(中等) 标签:树.深度优先搜索.图.图-无向图 解法 时间复杂度 空间复杂度 执行用时 Ans 1 (Python) O(N+E)O(N+E)O(N+E) : 其中E为边数 O(N+E ...

  3. LeetCode:螺旋矩阵【54】

    LeetCode:螺旋矩阵[54] 题目描述 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [[ 1, 2, 3 ],[ ...

  4. LeetCode题解目录

    最新更新于2020.11.27 前往LeetCode主页. 前往GitHub源码.(服务器原因,暂停同步.) 前往码云主页. 已解决 456/1878 - 简单353 中等 90 困难 13 2020 ...

  5. leetcode 题解 (500-1000题,持续更新,part 2)

    part1(1-500), part3(1000-*) 502. IPO 题意:给定k,w,profits数组和capital数组.k表示最多可完成的任务数.w是初始资本.profits是各个任务的收 ...

  6. 900 多道 LeetCode 题解,这个 GitHub 项目值得 Star!

    转自 | 码农有道 大家好,我是小 G. 周末风和日丽,适合刷 LeetCode 今天给你们推荐个 GitHub 项目,里面收集了 900 多道 LeetCode 题解,并包含中英文两个版本,适合大多 ...

  7. PHP版Leetcode题解开始随缘更新

    2019独角兽企业重金招聘Python工程师标准>>> PHP版Leetcode题解 我叫skys215,是一名bug工程师. 我接触编程的时间比较早,但是因为我数学不好加上比较懒, ...

  8. [LeetCode 题解]: Binary Tree Preorder Traversal

    前言 [LeetCode 题解]系列传送门:  http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 Given a binary ...

  9. LeetCode 题解汇总

    为什么80%的码农都做不了架构师?>>>    LeetCode 题解汇总 转载于:https://my.oschina.net/michao/blog/801863

最新文章

  1. 高性能千万级定时任务管理服务forsun使用详解
  2. weka: FCBFSearch
  3. Nacos 发布 v0.8.0 Pre-GA版本,安全稳定上生产
  4. SS CMS 全新跨平台 V7.0 版本正式发布
  5. Codeforces Round #694 Div. 2
  6. aop 代码_项目学生:使用AOP简化代码
  7. 保存时间 默认_操作技能|WORD文档没保存,有办法恢复吗?
  8. 面试常问的深度学习(DNN、CNN、RNN)的相关问题
  9. win7 下 java 环境变量配置
  10. Proxyee-down – 百度网盘全平台满速下载神器,还带有IDM的全网嗅探功能
  11. 深信服校园招聘安全攻防A卷
  12. 数据库作业4——数据查询
  13. 计算机网络存在的漏洞,常见的计算机网络安全漏洞有哪些
  14. 学习博士答辩之后的感想:
  15. 认证学习4 - Bearer认证(Token认证)讲解、代码实现、演示
  16. 如何优雅的用Axure绘制高保真原型心得分享
  17. JavaScript最简单的方法实现简易的计算器
  18. if-else过多,使用策略模式(Strategy)解决if-else乱象
  19. Qt超强绘图QCustomplot 动态图静态图时间坐标轴
  20. No adapter attached; skipping layout

热门文章

  1. 第二篇python安装(1)
  2. MATLAB给信号添加白噪声
  3. Linux防火墙iptables添加白名单
  4. RATER指数(转载)
  5. 微信 android 闪退问题怎么解决方法,如何解决微信闪退问题 四种解决微信闪退无法登录的原因及方法分享...
  6. 点云语义分割标注工具及生成训练数据
  7. 转业费计算器2019_退役金计算器_2012版 (含现役工资和转业费计算)
  8. 阿里 oss 出现 RequestId 错误处理方法
  9. 国内疫情数据可视化平台
  10. 前端基础三:ECMAScript