[Swift]LeetCode1018. 可被 5 整除的二进制前缀 | Binary Prefix Divisible By 5

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址: http://www.javashuo.com/article/p-prxkudza-md.html 
➤若是连接不是山青咏芝的博客园地址,则多是爬取做者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持做者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html

Given an array A of 0s and 1s, 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.)git

Return a list of booleans answer, where answer[i] is true if and only if N_i is divisible by 5.github

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:app

Input: [0,1,1,1,1,1]
Output: [true,false,false,false,true,false] 

Example 4:ide

Input: [1,1,1,0,1]
Output: [false,false,false,false,false] 

Note:spa

  1. 1 <= A.length <= 30000
  2. A[i] is 0 or 1

给定由若干 0 和 1 组成的数组 A。咱们定义 N_i:从 A[0] 到 A[i] 的第 i 个子数组被解释为一个二进制数(从最高有效位到最低有效位)。code

返回布尔值列表 answer,只有当 N_i 能够被 5 整除时,答案 answer[i] 为 true,不然为 falsehtm

示例 1:

输入:[0,1,1]
输出:[true,false,false]
解释:
输入数字为 0, 01, 011;也就是十进制中的 0, 1, 3 。只有第一个数能够被 5 整除,所以 answer[0] 为真。

示例 2:

输入:[1,1,1]
输出:[false,false,false]

示例 3:

输入:[0,1,1,1,1,1]
输出:[true,false,false,false,true,false]

示例 4:

输入:[1,1,1,0,1]
输出:[false,false,false,false,false]

提示:

  1. 1 <= A.length <= 30000
  2. A[i] 为 0 或 1

Runtime: 88 ms
Memory Usage: 20.7 MB
 1 class Solution {
 2     func prefixesDivBy5(_ A: [Int]) -> [Bool] {
 3         var ret:[Bool] = [Bool]()
 4         var x:Int = 0
 5         for v in A
 6         {
 7             x = (x * 2 + v) % 5
 8             ret.append(x == 0)
 9         }
10         return ret
11     }
12 }

88ms

 1 class Solution {
 2     func prefixesDivBy5(_ A: [Int]) -> [Bool] {
 3         var curr = 0
 4         var result = A.map { _ in false }
 5         for i in 0..<A.count {
 6             curr = (curr << 1) + A[i]
 7             result[i] = (curr % 5 == 0)
 8             curr = curr % 5
 9         }
10         return result
11     }
12 }

96ms

 1 class Solution {
 2     func prefixesDivBy5(_ A: [Int]) -> [Bool] {
 3         var sum = 0
 4         var ost = Array([1,2,4,3].reversed())
 5         let shift = A.count % 4
 6         var res: [Bool] = []
 7         for (i,n) in A.enumerated() {
 8             let ind = ((i+shift) % 4)
 9             sum += (n == 1 ? ost[ind] : 0)
10             res.append((sum % 5) == 0)
11         }
12         
13         return res
14     }
15 }

104ms

 1 class Solution {
 2     func prefixesDivBy5(_ A: [Int]) -> [Bool] {
 3         var num = 0
 4         var answers = [Bool]()
 5         for a in A {
 6             num += a
 7             answers.append(num % 5 == 0)
 8             num *= 2
 9             num = num % 5
10         }
11         
12         return answers
13     }
14 }
相关文章
相关标签/搜索