我们从前向后递推,发现这个二进制数的转化关系是
N_i = N_(i-1)*2 + A[i]
如果我们每次直接判断这个数是否能被5整除,那么随着数的增大,可能会溢出,所以我们考虑对5取一个模,这样Ni就会被限制在5以内,如何证明这个总是正确的?
代码
class Solution {
public:
vector<bool> prefixesDivBy5(vector<int>& A) {
int num = 0;
vector<bool> res;
for(auto a:A){
num = (num*2+a)%5;
if(num%5==0) res.push_back(1);
else res.push_back(0);
}
return res;
}
};