当前位置: 首页 > news >正文

详细介绍:力扣2245. 转角路径的乘积中最多能有几个尾随零

详细介绍:力扣2245. 转角路径的乘积中最多能有几个尾随零

在这里插入图片描述
在这里插入图片描述
这一题的大意是给出一个矩阵,让我们找到转角路径,使得路径上的乘积中尾随0尽可能的多。
我们把所有的转角路径都枚举一下,然后找到最大值。就是很容易想到的途径就
那么什么是转角路径呢?
向水平方向,那么就应该变为向竖直方向;反之亦然。当然,同样不能访问之前已经访问过的单元格。就是转角路径 定义为:包含至多一个弯的一组相邻单元。具体而言,路径应该完全 向水平方向 或者 向竖直方向 移动过弯(如果存在弯),而不能访问之前访问过的单元格。在过弯之后,路径应当完全朝 另一个 方向行进:假设之前
这看起来很麻烦,
我们要求枚举所有的点,把这些点都当作转角路径的拐点,然后对于每一个点就会有四种情况,上左,上右,下左,下右。
对于对于每一个点的这四种情况,我们需要需要取最大值。
因为数据范围为O(m*n)=10^5,只能支撑双重for循环
现在重点就在于如何快速的找到一条路径上的乘积中最多能有几个尾随零,
我们不能把路径上的每一个元素相乘,这样会溢出。
我们可以先提前找到每一个数中有多少个因数2和因数5,统计一下,因为每一个0的产生都是由一个因数2和一个因数5相乘得到的。因此在转角路径上的因数2和因数5的个数就决定了尾随0的个数,只需统计出转角路径上因数2和因数5两者个数的最小值即为尾随0的个数。
而统计路径上的因数,可以用前缀和来优化,可以分别用一个列前缀和和行前缀和来表示路径上的尾随0的个数。
因此,题目思路清晰:
1.先统计每一个点上的因数2和因数5的个数
2.再用前缀和计算出每一列和每一行上的因数2和因数5的个数。
3.枚举每一个点充当拐点,从而引出四种情况:上左,上右,下左,下右。用列前缀和行前缀和计算以该点作为拐点的路径的尾随零的个数。四种情况取最大值。
4.返回ans

int maxTrailingZeros(vector<vector<int>>& grid) {int m=grid.size();int n=grid[0].size();vector<vector<int>> cnt2(m+1,vector<int>(n+1,0));vector<vector<int>> cnt5(m+1,vector<int>(n+1,0));vector<vector<int>> col2(m+1,vector<int>(n+1,0));vector<vector<int>> col5(m+1,vector<int>(n+1,0));vector<vector<int>> row2(m+1,vector<int>(n+1,0));vector<vector<int>> row5(m+1,vector<int>(n+1,0));int ans=0;for(int i=0;i<m;i++){for(int j=0;j<n;j++){//看一个数里面有多少个2或者5的因子 int x=grid[i][j];while(x!=0){if(x%2==0){cnt2[i][j]++;x/=2;}else{break;}}x=grid[i][j];while(x!=0){if(x%5==0){cnt5[i][j]++;x/=5;}else{break;}}}}//统计出来了每一个点的2和5的数量现在让我们来算前缀和 for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){row2[i][j]=row2[i][j-1]+cnt2[i-1][j-1];row5[i][j]=row5[i][j-1]+cnt5[i-1][j-1];col2[i][j]=col2[i-1][j]+cnt2[i-1][j-1];col5[i][j]=col5[i-1][j]+cnt5[i-1][j-1];}}//现在我们需要找拐点for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){//先右后下//先下后右 //先下往左int down2= col2[i][j]-cnt2[i-1][j-1];int down5= col5[i][j]-cnt5[i-1][j-1];int left2= row2[i][j];int left5= row5[i][j];ans= max(ans,min(down2+left2,down5+left5));// 从下往右int  right2 = row2[i][n]-row2[i][j-1];int right5 = row5[i][n]- row5[i][j-1];ans=max(ans,min(down2+right2,down5+right5));//先上后左int  up2 = col2[m][j]-col2[i][j];int  up5 = col5[m][j]-col5[i][j];ans= max(ans,min(up2+left2,up5+left5));//先上后右 ans= max(ans,min(up2+right2,up5+right5));}}return ans;}

总结:这一题的难点我觉得不止一个:
1.将计算乘积的尾随0转换成计算路径上5和2因子的个数。
2.如何找到每一条路径,手段是枚举每一个点作为拐点,然后分四种情况讨论。
3.用前缀和优化,要能熟练计算列前缀和和行前缀和。
需要对这些知识点很熟练才能快速写出无bug的代码,不然调试也不好调试。
时间复杂度O(n^5)

http://www.rkmt.cn/news/29133.html

相关文章:

  • 2025年优秀的空气治理光触媒,自清洁光触媒最新TOP排名厂家
  • 2025年优秀的手动喷砂机,通过式喷砂机最新TOP厂家推荐
  • 完整教程:kotlin图算法
  • 2025年专业的立式空调机组,恒温恒湿空调机组厂家最新推荐排行榜
  • 亚稳态危害,
  • 2025年有实力圆林造景火山岩,污水处理火山岩推荐TOP品牌厂家
  • 2025年规模大的全屋定制衣帽间,全屋定制板材厂家最新权威推荐榜
  • 【中大主办、IEEE出版、EI稳检索】第五届通信技术与信息科技国际学术会议(ICCTIT 2025)
  • 软件开发公司如何利用大数据可视化设计提升决策效率 - 实践
  • 新win机器配置
  • 2025年评价高的全自动方便面生产线,非油炸方便面生产线推荐TOP生产厂家
  • 2025年耐用的特材板式换热器,板式换热器定制定做
  • 2025 最新石栏杆源头厂家推荐排行榜发布:汉白玉 / 桥面 / 大理石栏杆优质企业盘点及选购指南
  • 2025年专业的TPE汽车脚垫颗粒,TPE颗粒推荐TOP品牌厂家
  • 2025年评价高的公寓床厂家推荐及选择建议
  • 2025年耐用的铝合金电缆,集束电缆最新TOP排名厂家
  • 封装操作为 UCommand对象,支持撤销/重做,进行命令封装
  • VS 使用问题记录
  • 2025年口碑好的塑料中空板,中空板,PP塑料中空板厂家最新推荐榜
  • 2025 年热熔胶源厂家最新推荐排行榜:书刊装订 / 珍珠棉 / 纸箱包装 / 环保 / 书本等领域优质品牌及实用选购指南
  • AI状态机等
  • 2025年评价高的气压组合农用榨油机,一体式农用榨油机,电加热农用榨油机,圆排农用榨油机最新TOP厂家推荐
  • 2025年靠谱的玻璃钢储罐实力源头加工
  • 2025 年最新推荐!国内优质冷链 + 仓储物流公司排行榜:聚焦无锡热门线路,精选标杆企业无锡到郑州 / 无锡到上海物流公司推荐
  • 2025年靠谱的红木家具定制定做
  • 2025年诚信的在线压花机,工具房压花机,木塑压花机,离线压花机厂家推荐及采购指南
  • 使用 Delegate(委托)和 MulticastDelegate(多播委托)实现事件监听
  • 百度PaddleOCR-VL:基于0.9B超紧凑视觉语言模型,支持109种语言,性能超越GPT-4o等大模型
  • 2025年正规的pp储罐,聚丙烯pp储罐最新TOP厂家推荐
  • xxl-job 数据库表详解