[Swift]LeetCode672. 灯泡开关 Ⅱ | Bulb Switcher II
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10496919.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
There is a room with n
lights which are turned on initially and 4 buttons on the wall. After performing exactly m
unknown operations towards buttons, you need to return how many different kinds of status of the n
lights could be.
Suppose n
lights are labeled as number [1, 2, 3 ..., n], function of these 4 buttons are given below:
- Flip all the lights.
- Flip lights with even numbers.
- Flip lights with odd numbers.
- Flip lights with (3k + 1) numbers, k = 0, 1, 2, ...
Example 1:
Input: n = 1, m = 1. Output: 2 Explanation: Status can be: [on], [off]
Example 2:
Input: n = 2, m = 1. Output: 3 Explanation: Status can be: [on, off], [off, on], [off, off]
Example 3:
Input: n = 3, m = 1. Output: 4 Explanation: Status can be: [off, on, off], [on, off, on], [off, off, off], [off, on, on].
Note: n
and m
both fit in range [0, 1000].
现有一个房间,墙上挂有 n
只已经打开的灯泡和 4 个按钮。在进行了 m
次未知操作后,你需要返回这 n
只灯泡可能有多少种不同的状态。
假设这 n
只灯泡被编号为 [1, 2, 3 ..., n],这 4 个按钮的功能如下:
- 将所有灯泡的状态反转(即开变为关,关变为开)
- 将编号为偶数的灯泡的状态反转
- 将编号为奇数的灯泡的状态反转
- 将编号为
3k+1
的灯泡的状态反转(k = 0, 1, 2, ...)
示例 1:
输入: n = 1, m = 1. 输出: 2 说明: 状态为: [开], [关]
示例 2:
输入: n = 2, m = 1. 输出: 3 说明: 状态为: [开, 关], [关, 开], [关, 关]
示例 3:
输入: n = 3, m = 1. 输出: 4 说明: 状态为: [关, 开, 关], [开, 关, 开], [关, 关, 关], [关, 开, 开].
注意: n
和 m
都属于 [0, 1000].
1 class Solution { 2 func flipLights(_ n: Int, _ m: Int) -> Int { 3 var n = min(n, 3) 4 return min(1 << n, 1 + m * n) 5 } 6 }
4ms
1 class Solution { 2 struct State: Hashable, OptionSet { 3 let rawValue: Int 4 5 static let oddSensitive = State(rawValue: 1) 6 static let evenInsensitive = State(rawValue: 2) 7 static let oddInsensitive = State(rawValue: 4) 8 static let evenSensitive = State(rawValue: 8) 9 10 static let odd: State = [.oddSensitive, .oddInsensitive] 11 static let even: State = [.evenSensitive, .evenInsensitive] 12 static let sensitive: State = [.evenSensitive, .oddSensitive] 13 14 static let all: State = [.oddSensitive, .oddInsensitive, .evenSensitive, .evenInsensitive] 15 } 16 17 func flipLights(_ n: Int, _ m: Int) -> Int { 18 let mask = State(rawValue: 1 << min(n, 4) - 1) 19 let permittedCount = Set<Int>(0...4).filter { $0 <= m && ($0 % 2) == (m % 2) } 20 21 var states = Set<State>() 22 23 for i in 0..<16 { 24 var count = 0, state = State.all 25 if (i & 1) != 0 { 26 state.formSymmetricDifference(.all) 27 count += 1 28 } 29 if (i & 2) != 0 { 30 state.formSymmetricDifference(.even) 31 count += 1 32 } 33 if (i & 4) != 0 { 34 state.formSymmetricDifference(.odd) 35 count += 1 36 } 37 if (i & 8) != 0 { 38 state.formSymmetricDifference(.sensitive) 39 count += 1 40 } 41 42 if permittedCount.contains(count) { 43 states.insert(state.intersection(mask)) 44 } 45 } 46 47 return states.count 48 } 49 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了