当前位置: 首页 > 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.jsqmd.com/news/21110/

相关文章:

  • 2025 年板材厂家最新推荐排行榜:胖胖熊等优质企业综合实力解析与选购参考
  • 2025年优秀的空气治理光触媒,自清洁光触媒最新TOP排名厂家
  • 2025年优秀的手动喷砂机,通过式喷砂机最新TOP厂家推荐
  • 完整教程:kotlin图算法
  • 2025年专业的立式空调机组,恒温恒湿空调机组厂家最新推荐排行榜
  • 亚稳态危害,
  • 2025 年 502 胶水 UV 无影胶 AB 胶厂家最新推荐榜,技术实力与市场口碑深度解析的优质厂商汇总
  • 2025年有实力圆林造景火山岩,污水处理火山岩推荐TOP品牌厂家
  • 2025 年厌氧胶源头厂家最新推荐榜,技术实力与市场口碑深度解析的优质品牌合集
  • 2025年知名的氧化铝溶胶,粘结剂铝溶胶直销制造
  • 2025年规模大的全屋定制衣帽间,全屋定制板材厂家最新权威推荐榜
  • 2025年靠谱的智能沙发,家用沙发批发销售
  • 【中大主办、IEEE出版、EI稳检索】第五届通信技术与信息科技国际学术会议(ICCTIT 2025)
  • 2025年靠谱的小层叠养鸡设备,育雏育成养鸡设备,养鸡设备粪带厂家推荐及选择指南
  • MaopaiJD 建议 国家 在每辆汽车征收 年度停车费 每辆小汽车可停在全国城市 规划停车位中
  • 2025年有实力的环保移动厕所,公共移动厕所厂家推荐及选择指南
  • 新win机器配置
  • 2025年评价高的全自动方便面生产线,非油炸方便面生产线推荐TOP生产厂家
  • 2025年耐用的14mm尼龙隔热条,20mm尼龙隔热条厂家最新TOP推荐榜
  • 2025年诚信的铝方通方管,铝方通隔断实力源头
  • 2025年正规的高压旋转接头,高速旋转接头直销制造
  • 2025年昆明装修公司最新推荐榜,全屋装修/房屋装修/侘寂风格装修/简约时尚装修/宋式美学装修/极简风格装修、聚焦企业服务品质与风格适配性深度剖析
  • 计算机系统组成
  • 2025年专业的不锈钢保温风机,高压保温风机定制定做
  • 2025年耐用的特材板式换热器,板式换热器定制定做
  • 2025 最新石栏杆源头厂家推荐排行榜发布:汉白玉 / 桥面 / 大理石栏杆优质企业盘点及选购指南
  • 2025年知名的20吨地磅,地磅自动称重厂家推荐及选择指南
  • 2025年质量好的不锈钢门标门,不锈钢门双开门定制定做
  • 2025年比较好的橡胶辊,轧辊橡胶辊,硅胶辊橡胶辊,烫金轮橡胶辊厂家推荐及采购指南
  • DataGrid默认启用虚拟化(Virtualization)和 UI 虚拟化(UI Virtualization)功能