leetcode--1018.可被5整除的二进制前缀

题目描述:
在这里插入图片描述
示例1

输入:[0,1,1]
输出:[true,false,false]
解释:
输入数字为 0, 01, 011;也就是十进制中的 0, 1, 3 。只有第一个数可以被 5 整除,因此 answer[0] 为真。

示例2

输入:[1,1,1]
输出:[false,false,false]

示例3

输入:[0,1,1,1,1,1]
输出:[true,false,false,false,true,false]

思路:

当前子数组的二进制值就是前一个二进制值*2+自身的值。
但是不能一直这样加下去进行计算比较,因为每次乘2后加上自身的值会使得这个数字呈指数增长,当测试数组长一点时就会值溢出。所以每次计算出自身的值后就将自身的值对5取余再进行比较,如果对5取余后的值等于0,那说明当前子串的二进制值是5的倍数,链表添加true,否则添加false.

java代码

class Solution {
    public List<Boolean> prefixesDivBy5(int[] A) {
        List<Boolean> list = new ArrayList<Boolean>();
        int flag=0;
        for(int i=0;i<A.length;i++){
            flag=flag*2+A[i];
           flag=flag%5;
           if(flag==0){
               list.add(true);
           }else{
               list.add(false);
           }
        }
        return list;
        }
    }
发布了73 篇原创文章 · 获赞 7 · 访问量 3570

猜你喜欢

转载自blog.csdn.net/weixin_43801718/article/details/103450660