首先想到的思路是先统计每一行的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