题目描述
输入:[0,1,1]
输出:[true,false,false]
解释:
输入数字为 0, 01, 011;也就是十进制中的 0, 1, 3 。只有第一个数可以被 5 整除,因此 answer[0] 为真。
解题思路
我们不关心当前的二进制数转为的十进制数是几,不管它是几,这个二进制数下一个高位如果是1,那么就是这个二进制数*2+1,那么只需要关心二进制数对应十进制数的最后一位,反正是乘法。所以只要记录末尾那个数字就行
package com.company;
import java.util.ArrayList;
import java.util.List;
public class prefixesDivBy5 {
public List<Boolean> prefixesDivBy5(int[] A){
List<Boolean> list = new ArrayList<>();
int tail = 0;
for(int i = 0;i < A.length;i++){
// 算出最后一位即可
tail = tail * 2 + A[i];
tail = tail > 9 ? tail - 10: tail;
if(tail == 0 || tail == 5){
list.add(true);
}else {
list.add(false);
}
}
return list;
}
}