可被 5 整除的二进制前缀(Java)

题目

给定由若干 0 和 1 组成的数组 A。我们定义 N_i:从 A[0] 到 A[i] 的第 i 个子数组被解释为一个二进制数(从最高有效位到最低有效位)。返回布尔值列表 answer,只有当 N_i 可以被 5 整除时,答案 answer[i] 为 true,否则为 false

思想

由第一位开始,用num来计算当前从A[0]到A[i]所表示的二进制的数的十进制大小,因为A的长度过长可能会导致Java溢出,所以需要对num进行处理,因为可以整除5的数的尾数一定是0或5,所以只需判断尾数是否为零或五即可。

代码

class Solution {
    public List<Boolean> prefixesDivBy5(int[] A) {
        List<Boolean> list = new ArrayList<Boolean>();
        int num = 0;
        for(int i = 0; i < A.length; i++){
            num = num*2 + A[i];
            num = num > 9 ? num - 10 : num;
            if(num == 0 || num == 5){
                list.add(true);
            }
            else{
                list.add(false);
            }
        }
        return list;
    }
}
发布了35 篇原创文章 · 获赞 2 · 访问量 940

猜你喜欢

转载自blog.csdn.net/y18771025420/article/details/103905778