C++實現的燈泡開關 II


假設一個房間裡有 n 盞初始狀態為開啟的燈,牆上安裝了 4 個按鈕。在對按鈕進行了正好 m 次未知操作後,我們需要返回 n 盞燈有多少種不同的狀態組合。假設 n 盞燈分別標記為 [1, 2, 3 ..., n],這 4 個按鈕的功能如下:

  • 翻轉所有燈。
  • 翻轉偶數編號的燈。
  • 翻轉奇數編號的燈。
  • 翻轉 (3k + 1) 編號的燈,k = 0, 1, 2, ...

現在如果 n = 3 且 m = 1,那麼將會有 4 種操作,它們分別是:[關,開,關],[開,關,開],[關,關,關],[關,開,開]

為了解決這個問題,我們將遵循以下步驟:

  • 如果 n 為 0 或 m 為 0,則返回 1
  • 如果 n 為 1,則返回 2
  • 如果 n 為 2,當 m 為 1 時返回 3,否則返回 4
  • 如果 m 為 1,則返回 4
  • 如果 m 為 2,則返回 7,否則返回 8。

讓我們看下面的實現來更好地理解:

示例

線上演示

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int flipLights(int n, int m) {
      if (m == 0 || n == 0) return 1;
      if (n == 1) return 2;
      if (n == 2) return m == 1? 3:4;
      if (m == 1) return 4;
      return m == 2? 7:8;
   }
};
main(){
   Solution ob;
   cout << (ob.flipLights(3, 1));
}

輸入

3
1

輸出

4

更新於:2020年5月4日

229 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.