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则可以;所以每次仅保存末尾的数字即可