Given an array A
of 0
s and 1
s, consider N_i
: the i
-th subarray from A[0]
to A[i]
interpreted as a binary number (from most-significant-bit to least-significant-bit.)
Return a list of booleans answer, where answer[i]
is true
if and only if N_i
is divisible by 5
.
Example 1:
Input: [0,1,1]
Output: [true,false,false]
Explanation:
The input numbers in binary are 0, 01, 011; which are 0, 1, and 3 in base-10. Only the first number is divisible by 5, so answer[0] is true.
Example 2:
Input: [1,1,1]
Output: [false,false,false]
Example 3:
Input: [0,1,1,1,1,1]
Output: [true,false,false,false,true,false]
Example 4:
Input: [1,1,1,0,1]
Output: [false,false,false,false,false]
Note:
1 <= A.length <= 30000
A[i] is 0 or 1
解题思路
本题很简单,主要考虑一下溢出情况。
(n * 2 + m) % 5 = ((n % 5) * 2 + m) % 5
实现代码
// Runtime: 3 ms, faster than 97.49% of Java online submissions for Binary Prefix Divisible By 5.
// Memory Usage: 40.2 MB, less than 100.00% of Java online submissions for Binary Prefix Divisible By 5.
class Solution {
public List<Boolean> prefixesDivBy5(int[] A) {
List<Boolean> result = new ArrayList<>(A.length);
int num = 0;
for (int a : A) {
num = (num << 1 | a) % 5;
if (num == 0) {
result.add(true);
} else {
result.add(false);
}
}
return result;
}
}