[Swift]LeetCode1018. 可被 5 整除的二进制前缀 | Binary Prefix Divisible By 5
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址: https://www.cnblogs.com/strengthen/p/10633347.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
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]
is0
or1
给定由若干 0
和 1
组成的数组 A
。我们定义 N_i
:从 A[0]
到 A[i]
的第 i
个子数组被解释为一个二进制数(从最高有效位到最低有效位)。
返回布尔值列表 answer
,只有当 N_i
可以被 5
整除时,答案 answer[i]
为 true
,否则为 false
。
示例 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 <= A.length <= 30000
A[i]
为0
或1
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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了