題目地址:
https://leetcode.com/problems/binary-prefix-divisible-by-5/
給定一個數組,要求返回一個boolean數組,使得等於組成的二進制表示的數是否能被整除。代碼如下:
import java.util.ArrayList;
import java.util.List;
public class Solution {
public List<Boolean> prefixesDivBy5(int[] A) {
List<Boolean> res = new ArrayList<>(A.length);
int cur = 0;
for (int i = 0; i < A.length; i++) {
// 算出前i個數字二進制表示的數後直接模5後判斷
cur = ((cur << 1) + A[i]) % 5;
res.add(cur == 0);
}
return res;
}
}
時間複雜度,空間。
算法正確性證明:
對於,求對的帶餘除法,其中。我們證明對於任意,有。證明如下:最後一行顯然成立。這就證明了爲什麼算法中可以直接每一步都取模,而不是保留原數。