题目描述:
LeetCode 672. Bulb Switcher II
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次开关,求所有可能的灯泡状态。
4种开关为:
- 开关所有灯;
- 开关偶数编号的灯;
- 开关奇数编号的灯;
- 开关(3k + 1)编号的灯,k = 0, 1, 2, ...
解题思路:
分情况讨论:
当灯泡数n>=3,操作次数>= 3时,灯泡状态至多可能为8种:
(偶数编号灯开关和奇数编号灯开关作用等效)
- 全亮
- 全亮,3k + 1
- 奇数亮
- 奇数亮,3k + 1
- 偶数亮
- 偶数亮,3k + 1
- 全灭
- 全灭, 3k + 1
其余情况详见代码
Python代码:
class Solution(object):
def flipLights(self, n, m):
"""
:type n: int
:type m: int
:rtype: int
"""
if m * n == 0: return 1
if n == 1: return 2
if n == 2: return 4 - (m % 2)
if m == 1: return 4
if m == 2: return 7
return 8
本文链接:http://bookshadow.com/weblog/2017/09/03/leetcode-bulb-switcher-ii/
请尊重作者的劳动成果,转载请注明出处!书影博客保留对文章的所有权利。