这是小川的第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)的更多相关文章

  1. 【LeetCode】1018. Binary Prefix Divisible By 5 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  2. 1018. Binary Prefix Divisible By 5可被 5 整除的二进制前缀

    网址:https://leetcode.com/problems/binary-prefix-divisible-by-5/ 一次for循环遍历数组,在上次计算的基础上得到本次的结果! class S ...

  3. 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 ...

  4. 【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 ...

  5. [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 ...

  6. 【JavaScript】Leetcode每日一题-最大整除子集

    [JavaScript]Leetcode每日一题-最大整除子集 [题目描述] 给你一个由 无重复 正整数组成的集合 nums ,请你找出并返回其中最大的整除子集 answer ,子集中每一元素对(an ...

  7. 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 ...

  8. LeetCode 81 Search in Rotated Sorted Array II [binary search] <c++>

    LeetCode 81 Search in Rotated Sorted Array II [binary search] <c++> 给出排序好的一维有重复元素的数组,随机取一个位置断开 ...

  9. Leetcode之二分法专题-704. 二分查找(Binary Search)

    Leetcode之二分法专题-704. 二分查找(Binary Search) 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 t ...

随机推荐

  1. mongdb的优势和不足

    l  面向文档的数据库. l  一个介于关系型数据库和非关系型数据库之间的产品,是非关系系数据库中功能最丰富,最像关系型数据库的. l  特征是模式自由,schema-free.无需定义表结构. l  ...

  2. BZOJ3329 Xorequ[数位DP+递推矩阵快速幂]

    数    位    D    P    开    long    long 首先第一问是转化. 于是就可以二进制下DP了. 第二问是递推,假设最后$n-1$个01位的填法设为$f[i-1]$(方案包括 ...

  3. beanFactory & FactoryBean区别

    FactoryBean Spring内部实现的一种规范& 开头作为beanName Spring中所有的容器都是FactoryBean 因为容器本身也由容器管理, root来创建 都是单列在I ...

  4. centos7时区同步(时间24小时格式显示)

    我们在服务器安装linux系统时,有时会因服务器时间或者时区不正确导致程序出现错误. 首先输入date命令查看当前的时间和时区.要注意CST   EDT 等时区的区别 介绍一种与时间服务器上时间同步的 ...

  5. json代码——json序列化,json-parse,JSONstringify格式化输出,虚拟DOM

    JS对象转为类似json的字符串,对象->字符串叫序列化,字符串->对象      是反序列化 ㈠json序列化 <script> var shy = new Object() ...

  6. HDU 6669 Game

    hdu题面 解题思路 首先我们要选一个起点,这个起点应该在第一个区间内,然后再看第二个区间在左边还是右边以便移动,但转念一想,我们可以把起点直接选在前一堆区间的交集上,于是思路就有了--依次把所有区间 ...

  7. apache的httpclient进行http的交互处理

    使用apache的httpclient进行http的交互处理已经很长时间了,而httpclient实例则使用了http连接池,想必大家也没有关心过连接池的管理.事实上,通过分析httpclient源码 ...

  8. spring整合之后运行报什么只读错误。Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.

    解决办法, 再大dao的实现类上添加注解: @Transactional(readOnly = false ) 不让它只读就行了

  9. TensorFlow基本计算单元——变量

    # -*- coding: utf-8 -*- import tensorflow as tf a = 3 # 创建变量 w = tf.Variable([[0.5, 1.0]]) #行向量 x = ...

  10. 字符 kotlin(3)

    字符 用 Char 类型表示.它们不能直接当作数字) { // 错误:类型不兼容 // …… }} 字符字面值用单引号括起来: '1' . 特殊字符可以用反斜杠转义. 支持这几个转义序列: \t . ...