题目描述:
示例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;
}
}