【Leetcode】NO.2125 银行的激光束数量(C++&Python)[周赛]
2022/1/7 22:04:10
本文主要是介绍【Leetcode】NO.2125 银行的激光束数量(C++&Python)[周赛],对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
题目 2125. 银行中的激光束数量
- 虽说是中等题,我觉得这题就是题目在吓人而已做起来应该是简单题;
银行内部的防盗安全装置已经激活。给你一个下标从 0 开始的二进制字符串数组 bank ,表示银行的平面图,这是一个大小为 m x n 的二维矩阵。 bank[i] 表示第 i 行的设备分布,由若干 '0' 和若干 '1' 组成。'0' 表示单元格是空的,而 '1' 表示单元格有一个安全设备。
思路
首先想到的思路是先统计每一行的1的数量
然后将非0行提取出来;
遍历这个非0行;将第一个*第二个,依次相加;
如果这个非0行长度为1;表示只有一行有安防,就不能与其他形成光束,return 0;
逻辑比较简单,代码写得不好;写完之后想去评论区看看有什么好的解法;
-
另一种求和的解法是想定义pre=ans[0];
-
其中在统计“1”的数量的时候代码写复杂了;
for i in bank: cnt = i.count("1") // 直接使用这个函数
从第二行开始:
之后不断更新 i 的同时不断更新pre
代码
class Solution: def numberOfBeams(self, bank: List[str]) -> int: # 判断下一个行有多少个1 li = [0]*len(bank) sum = 0 ans = [] for i in range(len(bank)): for j in range(len(bank[0])): if bank[i][j]=="1": li[i] += 1 for i in range(len(li)): if li[i]!=0: ans.append(li[i]) if len(ans)==1: return 0 for i in range(len(ans)): if i == len(ans)-1: break sum += ans[i]*ans[i+1] return sum
更加简洁版本:
直接统计去掉0;不用后续处理
class Solution: def numberOfBeams(self, bank: List[str]) -> int: cnt_li = [] sum = 0 for i in bank: cnt = i.count("1") if cnt == 0: continue cnt_li.append(cnt) for i in range(len(cnt_li)): if i == len(cnt_li)-1: break sum += cnt_li[i]*cnt_li[i+1] return sum
这篇关于【Leetcode】NO.2125 银行的激光束数量(C++&Python)[周赛]的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24Python编程入门指南
- 2024-12-24Python编程基础入门
- 2024-12-24Python编程基础:变量与数据类型
- 2024-12-23使用python部署一个usdt合约,部署自己的usdt稳定币
- 2024-12-20Python编程入门指南
- 2024-12-20Python编程基础与进阶
- 2024-12-19Python基础编程教程
- 2024-12-19python 文件的后缀名是什么 怎么运行一个python文件?-icode9专业技术文章分享
- 2024-12-19使用python 把docx转为pdf文件有哪些方法?-icode9专业技术文章分享
- 2024-12-19python怎么更换换pip的源镜像?-icode9专业技术文章分享