Leetcode 1018. 可被 5 整除的二进制前缀(从前向后递推取模)

我们从前向后递推,发现这个二进制数的转化关系是

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;
    }
};

猜你喜欢

转载自blog.csdn.net/wwxy1995/article/details/112604610