class Solution {
    public List<Boolean> prefixesDivBy5(int[] A) {
        List<Boolean> result = new ArrayList<>();
        int n = 0;
        for(int i=0;i<A.length;++i)
        {
            n=(n*2+A[i])%5;
            result.add(0==n);
        }
        return result;
    }
}

 

本题主要难点在于位数问题,如果在32位以内或者是语言所能支持的位数之内,直接用int不断的移位就可以了,但是本题总共有30000位,无论哪种语言估计都没这么大的整形。

观察: 被5整除,十进制形式必须末尾是5或者0, 因此只需关注末尾的数字。

十进制  二进制

7           111

14          1110

15          1111

 

观察(111) 这个例子,不能被5整除,那么再加一位,如果0则依然不能整除,1则可以;所以每次仅保存末尾的数字即可