题目
给定由若干 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;
}
}