LeetCode.1018-可被5整除的二进制数(Binary Prefix Divisible By 5)
这是小川的第379次更新,第407篇原创
01 看题和准备
今天介绍的是LeetCode算法题中Easy级别的第241题(顺位题号是1018)。给定0和1的数组A,考虑N_i:从A[0]到A[i]的第i个子数组被解释为二进制数(从最高有效位到最低有效位)。
返回布尔值answer列表,当且仅当N_i可被5整除时,answer[i]为true。
例如:
输入:[0,1,1]
输出:[true,false,false]
说明:二进制输入数字为0,01,011,转为十进制数,分别为0,1和3。只有第一个数字可以被5整除,所以answer[0]为true。
输入:[1,1,1]
输出:[false,false,false]
输入:[0,1,1,1,1,1]
输出:[true,false,false,false,true,false]
输入:[1,1,1,0,1]
输出:[false,false,false,false,false]
注意:
1 <= A.length <= 30000
A[i]为0或1
02 解题
题目的意思是A中都是二进制位的0和1,依次从左到右,判断二进制组成的十进制数能否被5整除,将每次的判断结果存入List。
按照常规的操作,循环A中的元素,组成一个二进制字符串,再转成十进制数,再对5取余,将判断结果存入List中,但是有个问题需要考虑,A的长度上限是30000,如果组合成的二进制字符串长度过长,是否还能被转成整数?答案存疑,那我们需要换另外一种思路来解决问题了。
结合例子来看,[1,1,1,0,1],从左往右看:
第一次计算,二进制数为1,转为十进制为1,1%5=1。
第二次计算,二进制数为11,转为十进制为3,(1*2+1)%5 = 3%5 =3。
第三次计算,二进制数为111,转为十进制为7,(3*2+1)%5 = 7%5 =2。
第四次计算,二进制数为1110,转为十进制为14,(2*2+0)%5 = 4%5 = 14%5 =4。
第五次计算,二进制数为11101,转为十进制为29,(4*2+1)%5= 9%5 = 29%5 =4。
从例子中可以看到,新的二进制数是在前一次二进制数的基础上左移一位得到的,即 num[i+1] = (A[i]<<1) + A[i+1],A[i]为前一次的十进制整数,A[i+1]为在前一次二进制数尾部新加的0或1,题目只是需要我们判断每次新组成的二进制数能否被5整除,我们可以利用前一次取余的结果左移,因为其中能被整除的部分是不太需要关心的,这样可以避免数字过大超出范围的风险。
public List<Boolean> prefixesDivBy5(int[] A) {
List<Boolean> answer = new ArrayList<Boolean>();
int num = 0;
for (int i=0; i<A.length; i++) {
// 写成 num = (num<<1) + A[i]; 也是一样的效果
num = num*2 + A[i];
num %= 5;
answer.add(num == 0);
}
return answer;
}
小结
算法专题目前已连续日更超过七个月,算法题文章247+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
LeetCode.1018-可被5整除的二进制数(Binary Prefix Divisible By 5)的更多相关文章
- 【LeetCode】1018. Binary Prefix Divisible By 5 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- 1018. Binary Prefix Divisible By 5可被 5 整除的二进制前缀
网址:https://leetcode.com/problems/binary-prefix-divisible-by-5/ 一次for循环遍历数组,在上次计算的基础上得到本次的结果! class S ...
- Leetcode 1018. Binary Prefix Divisible By 5
class Solution: def prefixesDivBy5(self, A: List[int]) -> List[bool]: ans,t = [],0 for a in A: t ...
- 【leetcode】1018. Binary Prefix Divisible By 5
题目如下: Given an array A of 0s and 1s, consider N_i: the i-th subarray from A[0] to A[i] interpreted a ...
- [Swift]LeetCode1018. 可被 5 整除的二进制前缀 | Binary Prefix Divisible By 5
Given an array A of 0s and 1s, consider N_i: the i-th subarray from A[0] to A[i] interpreted as a bi ...
- 【JavaScript】Leetcode每日一题-最大整除子集
[JavaScript]Leetcode每日一题-最大整除子集 [题目描述] 给你一个由 无重复 正整数组成的集合 nums ,请你找出并返回其中最大的整除子集 answer ,子集中每一元素对(an ...
- leetcode面试准备:Lowest Common Ancestor of a Binary Search Tree & Binary Tree
leetcode面试准备:Lowest Common Ancestor of a Binary Search Tree & Binary Tree 1 题目 Binary Search Tre ...
- LeetCode 81 Search in Rotated Sorted Array II [binary search] <c++>
LeetCode 81 Search in Rotated Sorted Array II [binary search] <c++> 给出排序好的一维有重复元素的数组,随机取一个位置断开 ...
- Leetcode之二分法专题-704. 二分查找(Binary Search)
Leetcode之二分法专题-704. 二分查找(Binary Search) 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 t ...
随机推荐
- 关于jq中input的value值clone的问题
如果想将input进行克隆,然后在后面显示出来并修改input里面的文字,这时就会发现一个问题,就是你克隆出来的value值始终是你克隆时的value,检查页面元素你就会发现,这时需要对克隆之后的in ...
- nginx设置负载均衡
...... why负载均衡,随着企业业务增长和海量请求,给服务端造成海量并发,导致响应不及时需扩容后端服务,前端需要负载均衡,均摊请求,让服务端吞吐请求的能力提升 单点服务方式,一个点挂掉整个服务就 ...
- PTA 道长你想怎么死
道长你想怎么死 (25 分) 故事:[ 他身着白衣,撑着伞朝我走来.说要送我回家.而我早已陷入他那对深邃的眼眸中,心内一阵悸动.他一把拉我入伞下.我得知他是山上的道士,也刚好下山采药.他把伞赠予我,一 ...
- Latex生成的.pdf 公式之间隔了几行空白
如题, 解决办法: \vspace{-1.5cm},这个数值根据需要来设置.
- React 开发中面临的九个重要抉择
抉择系列:在技术开发的过程中我们会面临着各种各样的抉择,我们在不同情境下该如何选择恰当的技术,这是本系列文章想要解决的问题. 在 React 开发的过程中我们常常会遇到一些抉择,下面我将选取其中一些个 ...
- maven打包加时间戳方法总结
基于Maven的项目,发布时需要打包,如tar.gz.web项目打成war格式包.每次打包时希望自己加上时间戳,假如我的项目名是myproject,默认打包后名为myproject.war.而我希望的 ...
- 20175215 2018-2019-2 第七周java课程学习总结
第八章 常用实用类 8.1 String类 Java专门提供了用来处理字符序列的String类.String类在java.lang包中,由于java.lang包中的类被默认引入,因此程序可以直接使用S ...
- 选题 Scrum立会报告+燃尽图 02
此作业要求参见[https://edu.cnblogs.com/campus/nenu/2019fall/homework/8683] 一.小组介绍 组长:贺敬文 组员:彭思雨 王志文 位军营 杨萍 ...
- 6、kubernetes资源清单之Pod控制器190714
一.Pod控制器的类别 ReplicationController:早期唯一的控制器,已废弃 ReplicaSet:控制Pod满足用户期望副本:标签选择器选择由自己管理的Pod副本:Pod资源模板完成 ...
- java高级面试题汇总(复习)从最基础的往上复习,每天定期更新。
每天搬一点砖,总有一天成为大牛! 看问题的时候请不要立马去翻答案,多想想. 看完答案可以问问为什么,尝试拓展!一起加油吧! 每个答案后面都有一个小彩蛋(一个以上的拓展问题),钻研让你先人一步. jav ...