1018. Binary Prefix Divisible by 5

1018. Binary Prefix Divisible By 5#

题目 #

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. `1 <= A.length <= 30000`
2. `A[i]` is `0` or `1`

解题思路 #

• 简单题。每扫描数组中的一个数字，累计转换成二进制数对 5 取余，如果余数为 0，则存入 true，否则存入 false。

代码 #

``````package leetcode

func prefixesDivBy5(a []int) []bool {
res, num := make([]bool, len(a)), 0
for i, v := range a {
num = (num<<1 | v) % 5
res[i] = num == 0
}
return res
}
``````

Apr 8, 2023
Edit this page