- 1018.可被5整除的二进制前缀
- 思路:
在一个二进制数组A中,判断子串[ 0,i ]表示的二进制数是否被5整除,返回一个vector
1.顺序读取,依次判断:O(n) ;O(n) ;
类似于读取十进制,sum = sum * 10 + nums[ i ] ;求出每一个子串的十进制数并判断是否被5整除
class Solution {
public:
vector<bool> prefixesDivBy5(vector<int>& A) {
vector<bool> res(A.size(), false);
int sum = 0;
for (int i = 0; i < A.size(); ++i) {
sum = (sum * 2 + A[i]) % 5; //这里每次都要取余,否则会溢出
if (!sum) res[i] = true;
}
return res;
}
};
2.有效状态机
不太懂,二刷补
- 总结:
- 为了防止溢出,每次都要取余