一、题目描述


二、解题思路
整体思路
由于题目描述比较清晰,所以我们可以采用模拟的方法来解决这个问题。
具体思路
(1)首先,定义变量,ret数组作为最后的返回值,mod记录二进制前缀mod5的值,初始化为0;
(2)遍历nums数组:
<1>计算当前位置的mod值,执行Mod*=2,Mod+=nums[i],Mod%=5;
<2>将ret[i]赋值为!Mod,如果为0,就为true,反之就为false;
(3)nums遍历完成,ret更新完成,返回ret即为所求;
注意:在遍历数组的过程中需要计算当前二进制前缀是否为5的整数倍,我们不需要记录前缀的值,只需要记录前缀mod5的值就可,可以避免溢出。
三、代码实现
cpp
class Solution {
public:
vector<bool> prefixesDivBy5(vector<int>& nums) {
int n=nums.size();
vector<bool> ret(n,false);
int Mod=0;
for(int i=0;i!=n;i++){
Mod*=2;
Mod+=nums[i];
Mod%=5;
ret[i]=!Mod;
}
return ret;
}
};