672. 燈泡開關 Ⅱ
阿新 • • 發佈:2018-11-19
現有一個房間,牆上掛有 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].
==================================================
解題思路:
這個題要用遞迴就涼了,需要找一下規律
發現只要前三個燈泡確定,後面無論多少個燈泡,排列方式已經固定
也就是說,這個題輸出最多就8種
也就是總結燈泡數小於3以及運算元小於3的情況
下面是程式碼
class Solution {
public int flipLights(int n, int m) {
n = n<3?n:3;
return 1<<n<(1+n*m)?1<<n:(1+n*m);
}
}
寫一行的話就有點長了,分兩行寫吧。。。