-
Notifications
You must be signed in to change notification settings - Fork 0
/
bulb_switcher_ii.rs
36 lines (31 loc) · 1.88 KB
/
bulb_switcher_ii.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// 灯泡开关 Ⅱ
// https://leetcode.cn/problems/bulb-switcher-ii
// INLINE ../../images/math/bulb_switcher_ii.jpeg
pub struct Solution;
impl Solution {
pub fn flip_lights(n: i32, presses: i32) -> i32 {
// 如果按压次数为0,那么只有一种可能性,即所有灯泡都是关闭的
if presses == 0 {
return 1;
}
// 如果只有一个灯泡,那么有两种可能性:开启和关闭
if n == 1 {
return 2;
}
// 如果只有两个灯泡,那么有特殊情况:第一次按下后,所有灯泡都会改变状态;第二次按下后,只有两个灯泡会互相切换状态
if n == 2 {
return if presses == 1 { 3 } else { 4 };
}
// 如果按压次数为1,那么有4种可能性:只有奇数编号的灯泡被切换,只有偶数编号的灯泡被切换,只有第一个和第二个灯泡被切换,只有第二个和第三个灯泡被切换
if presses == 1 {
4
} else {
// 如果按压次数为2,那么有7种可能性:只有奇数编号的灯泡被切换两次,只有偶数编号的灯泡被切换两次,只有第一个和第三个灯泡被切换两次,只有第二个和第四个灯泡被切换两次,所有灯泡都被切换两次,只有第一和第三个灯泡被切换,只有第二和第四个灯泡被切换
if presses == 2 {
return 7;
}
// 如果按压次数大于2,那么只有8种可能性:所有灯泡都被切换,只有奇数编号的灯泡被切换,只有偶数编号的灯泡被切换,只有第一个和第二个灯泡被切换,只有第二个和第三个灯泡被切换,只有第三个和第四个灯泡被切换,只有第一个和第三个灯泡被切换,只有第二个和第四个灯泡被切换
8
}
}
}