Leetcode 672.燈泡開關II

燈泡開關II

現有一個房間,牆上掛有 n 只已經打開的燈泡和 4 個按鈕。在進行了 m 次未知操做後,你須要返回這 n 只燈泡可能有多少種不一樣的狀態。 spa

假設這 n 只燈泡被編號爲 [1, 2, 3 ..., n],這 4 個按鈕的功能以下: code

  1. 將全部燈泡的狀態反轉(即開變爲關,關變爲開)
  2. 將編號爲偶數的燈泡的狀態反轉
  3. 將編號爲奇數的燈泡的狀態反轉
  4. 將編號爲 3k+1 的燈泡的狀態反轉(k = 0, 1, 2, ...)

示例 1: blog

輸入: n = 1, m = 1. ip

輸出: 2 io

說明: 狀態爲: [開], [關] class

示例 2: di

輸入: n = 2, m = 1. co

輸出: 3 return

說明: 狀態爲: [開, 關], [關, 開], [關, 關]

示例 3:

輸入: n = 3, m = 1.

輸出: 4

說明: 狀態爲: [關, 開, 關], [開, 關, 開], [關, 關, 關], [關, 開, 開].

注意: n 和 m 都屬於 [0, 1000].

 

咱們將3k+1的值定義爲內部值,非3k+1的值定義爲外部值,

容易發現,當n>=4的時候,內部值和外部值都有計數和偶數,這裏還有一個規律,就是對於一組n,m可以獲得的燈泡狀態,進行奇數次變換或者是偶數次變換以後可以變回開始的狀態,所以對於n,m2,m2>=m+2包含n,m的全部狀態

當n=1的時候,當m=1的時候包含所有兩種狀態,m=2的時候包含所有兩種狀態,m>2的時候包含m=1的時候的所有狀態,因此返回2

當n=2的時候,當m=1的時候包含3種狀態,m=2的時候包含4種狀態,m=3包含所有狀態,m>3的時候包含m=2的所有狀態也就是所有2種狀態

當n>2的時候,當m=1的時候包含7種狀態,當m=2的時候包含8種狀態,m=3的時候包含所有8種狀態,m>3的時候包含m=2的所有狀態也就是8種狀態

 

 1 class Solution {
 2     public int flipLights(int n, int m) {
 3         if(m==0) return 1;
 4         if(n==1) return 2;
 5         if(n==2){
 6             if(m==1) return 3;
 7             else{
 8                 return 4;
 9             }
10         }
11         if(m==1) return 4;
12         if(m==2) return 7;
13         return 8;
14     }
15 }
相關文章
相關標籤/搜索