1018. Binary Prefix Divisible By 5
Description
You are given a binary array nums (0-indexed).
We define xi as the number whose binary representation is the subarray nums[0..i] (from most-significant-bit to least-significant-bit).
- For example, if
nums = [1,0,1], thenx0 = 1,x1 = 2, andx2 = 5.
Return an array of booleans answer where answer[i] is true if xi is divisible by 5.
Example 1:
Input: nums = [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: nums = [1,1,1] Output: [false,false,false]
Constraints:
1 <= nums.length <= 105nums[i]is either0or1.
Solutions
Solution 1: Simulation
We use a variable \(x\) to represent the current binary prefix, then traverse the array \(nums\). For each element \(v\), we left shift \(x\) by one bit, then add \(v\), and take the result modulo \(5\). If the result equals \(0\), it means the current binary prefix is divisible by \(5\), and we add \(\textit{true}\) to the answer array; otherwise, we add \(\textit{false}\) to the answer array.
The time complexity is \(O(n)\), and ignoring the space consumption of the answer array, the space complexity is \(O(1)\).
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 9 10 11 12 | |
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 9 | |