1. 程式人生 > >LeetCode319. 燈泡開關

LeetCode319. 燈泡開關

初始時有 個燈泡關閉。 第 1 輪,你開啟所有的燈泡。 第 2 輪,每兩個燈泡你關閉一次。 第 3 輪,每三個燈泡切換一次開關(如果關閉則開啟,如果開啟則關閉)。第 i 輪,每 個燈泡切換一次開關。 對於第 輪,你只切換最後一個燈泡的開關。 找出 輪後有多少個亮著的燈泡。

示例:

輸入: 3
輸出: 1 
解釋: 
初始時, 燈泡狀態 [關閉, 關閉, 關閉].
第一輪後, 燈泡狀態 [開啟, 開啟, 開啟].
第二輪後, 燈泡狀態 [開啟, 關閉, 開啟].
第三輪後, 燈泡狀態 [開啟, 關閉, 關閉]. 

你應該返回 1,因為只有一個燈泡還亮著。

思路:首先想到的就是陣列來模擬每個燈泡的狀態,0代表關閉,1代表開啟。.模擬n輪後遍歷陣列尋找開啟的燈泡個數。

class Solution {
    public int bulbSwitch(int n) {
          int[] a=new int[n];
        for(int i=1;i<=n;i++){
            trunOf(a,i);
        }
        int count=0;
        for(int i=0;i<a.length;i++){
            if(a[i]!=0){
                count++;
            }
        }
        return count;
    }
     public  void trunOf(int a[],int k){
        for(int i=k-1;i<a.length;i+=k){
            if(a[i]==0){
                a[i]=1;
            }else{
                a[i]=0;
            }
        }
    }
}

但是提交程式碼會超出時間限制。於是猜想這其中是不是有什麼規律,將1到200內的燈泡數全部進行n輪開關後,開啟的燈泡個數打印出來,結果如下

燈泡數:1       n輪後開啟的燈泡數: 1 燈泡數:2       n輪後開啟的燈泡數: 1 燈泡數:3       n輪後開啟的燈泡數: 1 燈泡數:4       n輪後開啟的燈泡數: 2 燈泡數:5       n輪後開啟的燈泡數: 2 燈泡數:6       n輪後開啟的燈泡數: 2 燈泡數:7       n輪後開啟的燈泡數: 2 燈泡數:8       n輪後開啟的燈泡數: 2 燈泡數:9       n輪後開啟的燈泡數: 3 燈泡數:10       n輪後開啟的燈泡數: 3 燈泡數:11       n輪後開啟的燈泡數: 3 燈泡數:12       n輪後開啟的燈泡數: 3 燈泡數:13       n輪後開啟的燈泡數: 3 燈泡數:14       n輪後開啟的燈泡數: 3 燈泡數:15       n輪後開啟的燈泡數: 3 燈泡數:16       n輪後開啟的燈泡數: 4 燈泡數:17       n輪後開啟的燈泡數: 4 燈泡數:18       n輪後開啟的燈泡數: 4 燈泡數:19       n輪後開啟的燈泡數: 4 燈泡數:20       n輪後開啟的燈泡數: 4 燈泡數:21       n輪後開啟的燈泡數: 4 燈泡數:22       n輪後開啟的燈泡數: 4 燈泡數:23       n輪後開啟的燈泡數: 4 燈泡數:24       n輪後開啟的燈泡數: 4 燈泡數:25       n輪後開啟的燈泡數: 5 燈泡數:26       n輪後開啟的燈泡數: 5 燈泡數:27       n輪後開啟的燈泡數: 5 燈泡數:28       n輪後開啟的燈泡數: 5 燈泡數:29       n輪後開啟的燈泡數: 5 燈泡數:30       n輪後開啟的燈泡數: 5 燈泡數:31       n輪後開啟的燈泡數: 5 燈泡數:32       n輪後開啟的燈泡數: 5 燈泡數:33       n輪後開啟的燈泡數: 5 燈泡數:34       n輪後開啟的燈泡數: 5 燈泡數:35       n輪後開啟的燈泡數: 5 燈泡數:36       n輪後開啟的燈泡數: 6 燈泡數:37       n輪後開啟的燈泡數: 6 燈泡數:38       n輪後開啟的燈泡數: 6 燈泡數:39       n輪後開啟的燈泡數: 6 燈泡數:40       n輪後開啟的燈泡數: 6 燈泡數:41       n輪後開啟的燈泡數: 6 燈泡數:42       n輪後開啟的燈泡數: 6 燈泡數:43       n輪後開啟的燈泡數: 6 燈泡數:44       n輪後開啟的燈泡數: 6 燈泡數:45       n輪後開啟的燈泡數: 6 燈泡數:46       n輪後開啟的燈泡數: 6 燈泡數:47       n輪後開啟的燈泡數: 6 燈泡數:48       n輪後開啟的燈泡數: 6 燈泡數:49       n輪後開啟的燈泡數: 7 燈泡數:50       n輪後開啟的燈泡數: 7 燈泡數:51       n輪後開啟的燈泡數: 7 燈泡數:52       n輪後開啟的燈泡數: 7 燈泡數:53       n輪後開啟的燈泡數: 7 燈泡數:54       n輪後開啟的燈泡數: 7 燈泡數:55       n輪後開啟的燈泡數: 7 燈泡數:56       n輪後開啟的燈泡數: 7 燈泡數:57       n輪後開啟的燈泡數: 7 燈泡數:58       n輪後開啟的燈泡數: 7 燈泡數:59       n輪後開啟的燈泡數: 7 燈泡數:60       n輪後開啟的燈泡數: 7 燈泡數:61       n輪後開啟的燈泡數: 7 燈泡數:62       n輪後開啟的燈泡數: 7 燈泡數:63       n輪後開啟的燈泡數: 7 燈泡數:64       n輪後開啟的燈泡數: 8 燈泡數:65       n輪後開啟的燈泡數: 8 燈泡數:66       n輪後開啟的燈泡數: 8 燈泡數:67       n輪後開啟的燈泡數: 8 燈泡數:68       n輪後開啟的燈泡數: 8 燈泡數:69       n輪後開啟的燈泡數: 8 燈泡數:70       n輪後開啟的燈泡數: 8 燈泡數:71       n輪後開啟的燈泡數: 8 燈泡數:72       n輪後開啟的燈泡數: 8 燈泡數:73       n輪後開啟的燈泡數: 8 燈泡數:74       n輪後開啟的燈泡數: 8 燈泡數:75       n輪後開啟的燈泡數: 8 燈泡數:76       n輪後開啟的燈泡數: 8 燈泡數:77       n輪後開啟的燈泡數: 8 燈泡數:78       n輪後開啟的燈泡數: 8 燈泡數:79       n輪後開啟的燈泡數: 8 燈泡數:80       n輪後開啟的燈泡數: 8 燈泡數:81       n輪後開啟的燈泡數: 9 燈泡數:82       n輪後開啟的燈泡數: 9 燈泡數:83       n輪後開啟的燈泡數: 9 燈泡數:84       n輪後開啟的燈泡數: 9 燈泡數:85       n輪後開啟的燈泡數: 9 燈泡數:86       n輪後開啟的燈泡數: 9 燈泡數:87       n輪後開啟的燈泡數: 9 燈泡數:88       n輪後開啟的燈泡數: 9 燈泡數:89       n輪後開啟的燈泡數: 9 燈泡數:90       n輪後開啟的燈泡數: 9 燈泡數:91       n輪後開啟的燈泡數: 9 燈泡數:92       n輪後開啟的燈泡數: 9 燈泡數:93       n輪後開啟的燈泡數: 9 燈泡數:94       n輪後開啟的燈泡數: 9 燈泡數:95       n輪後開啟的燈泡數: 9 燈泡數:96       n輪後開啟的燈泡數: 9 燈泡數:97       n輪後開啟的燈泡數: 9 燈泡數:98       n輪後開啟的燈泡數: 9 燈泡數:99       n輪後開啟的燈泡數: 9 燈泡數:100       n輪後開啟的燈泡數: 10 燈泡數:101       n輪後開啟的燈泡數: 10 燈泡數:102       n輪後開啟的燈泡數: 10 燈泡數:103       n輪後開啟的燈泡數: 10 燈泡數:104       n輪後開啟的燈泡數: 10 燈泡數:105       n輪後開啟的燈泡數: 10 燈泡數:106       n輪後開啟的燈泡數: 10 燈泡數:107       n輪後開啟的燈泡數: 10 燈泡數:108       n輪後開啟的燈泡數: 10 燈泡數:109       n輪後開啟的燈泡數: 10 燈泡數:110       n輪後開啟的燈泡數: 10 燈泡數:111       n輪後開啟的燈泡數: 10 燈泡數:112       n輪後開啟的燈泡數: 10 燈泡數:113       n輪後開啟的燈泡數: 10 燈泡數:114       n輪後開啟的燈泡數: 10 燈泡數:115       n輪後開啟的燈泡數: 10 燈泡數:116       n輪後開啟的燈泡數: 10 燈泡數:117       n輪後開啟的燈泡數: 10 燈泡數:118       n輪後開啟的燈泡數: 10 燈泡數:119       n輪後開啟的燈泡數: 10 燈泡數:120       n輪後開啟的燈泡數: 10 燈泡數:121       n輪後開啟的燈泡數: 11 燈泡數:122       n輪後開啟的燈泡數: 11 燈泡數:123       n輪後開啟的燈泡數: 11 燈泡數:124       n輪後開啟的燈泡數: 11 燈泡數:125       n輪後開啟的燈泡數: 11 燈泡數:126       n輪後開啟的燈泡數: 11 燈泡數:127       n輪後開啟的燈泡數: 11 燈泡數:128       n輪後開啟的燈泡數: 11 燈泡數:129       n輪後開啟的燈泡數: 11 燈泡數:130       n輪後開啟的燈泡數: 11 燈泡數:131       n輪後開啟的燈泡數: 11 燈泡數:132       n輪後開啟的燈泡數: 11 燈泡數:133       n輪後開啟的燈泡數: 11 燈泡數:134       n輪後開啟的燈泡數: 11 燈泡數:135       n輪後開啟的燈泡數: 11 燈泡數:136       n輪後開啟的燈泡數: 11 燈泡數:137       n輪後開啟的燈泡數: 11 燈泡數:138       n輪後開啟的燈泡數: 11 燈泡數:139       n輪後開啟的燈泡數: 11 燈泡數:140       n輪後開啟的燈泡數: 11 燈泡數:141       n輪後開啟的燈泡數: 11 燈泡數:142       n輪後開啟的燈泡數: 11 燈泡數:143       n輪後開啟的燈泡數: 11 燈泡數:144       n輪後開啟的燈泡數: 12 燈泡數:145       n輪後開啟的燈泡數: 12 燈泡數:146       n輪後開啟的燈泡數: 12 燈泡數:147       n輪後開啟的燈泡數: 12 燈泡數:148       n輪後開啟的燈泡數: 12 燈泡數:149       n輪後開啟的燈泡數: 12 燈泡數:150       n輪後開啟的燈泡數: 12 燈泡數:151       n輪後開啟的燈泡數: 12 燈泡數:152       n輪後開啟的燈泡數: 12 燈泡數:153       n輪後開啟的燈泡數: 12 燈泡數:154       n輪後開啟的燈泡數: 12 燈泡數:155       n輪後開啟的燈泡數: 12 燈泡數:156       n輪後開啟的燈泡數: 12 燈泡數:157       n輪後開啟的燈泡數: 12 燈泡數:158       n輪後開啟的燈泡數: 12 燈泡數:159       n輪後開啟的燈泡數: 12 燈泡數:160       n輪後開啟的燈泡數: 12 燈泡數:161       n輪後開啟的燈泡數: 12 燈泡數:162       n輪後開啟的燈泡數: 12 燈泡數:163       n輪後開啟的燈泡數: 12 燈泡數:164       n輪後開啟的燈泡數: 12 燈泡數:165       n輪後開啟的燈泡數: 12 燈泡數:166       n輪後開啟的燈泡數: 12 燈泡數:167       n輪後開啟的燈泡數: 12 燈泡數:168       n輪後開啟的燈泡數: 12 燈泡數:169       n輪後開啟的燈泡數: 13 燈泡數:170       n輪後開啟的燈泡數: 13 燈泡數:171       n輪後開啟的燈泡數: 13 燈泡數:172       n輪後開啟的燈泡數: 13 燈泡數:173       n輪後開啟的燈泡數: 13 燈泡數:174       n輪後開啟的燈泡數: 13 燈泡數:175       n輪後開啟的燈泡數: 13 燈泡數:176       n輪後開啟的燈泡數: 13 燈泡數:177       n輪後開啟的燈泡數: 13 燈泡數:178       n輪後開啟的燈泡數: 13 燈泡數:179       n輪後開啟的燈泡數: 13 燈泡數:180       n輪後開啟的燈泡數: 13 燈泡數:181       n輪後開啟的燈泡數: 13 燈泡數:182       n輪後開啟的燈泡數: 13 燈泡數:183       n輪後開啟的燈泡數: 13 燈泡數:184       n輪後開啟的燈泡數: 13 燈泡數:185       n輪後開啟的燈泡數: 13 燈泡數:186       n輪後開啟的燈泡數: 13 燈泡數:187       n輪後開啟的燈泡數: 13 燈泡數:188       n輪後開啟的燈泡數: 13 燈泡數:189       n輪後開啟的燈泡數: 13 燈泡數:190       n輪後開啟的燈泡數: 13 燈泡數:191       n輪後開啟的燈泡數: 13 燈泡數:192       n輪後開啟的燈泡數: 13 燈泡數:193       n輪後開啟的燈泡數: 13 燈泡數:194       n輪後開啟的燈泡數: 13 燈泡數:195       n輪後開啟的燈泡數: 13 燈泡數:196       n輪後開啟的燈泡數: 14 燈泡數:197       n輪後開啟的燈泡數: 14 燈泡數:198       n輪後開啟的燈泡數: 14 燈泡數:199       n輪後開啟的燈泡數: 14 燈泡數:200       n輪後開啟的燈泡數: 14

發現第一輪開啟燈泡數為1的燈泡個數是1~3,下一輪開啟燈泡數為2的燈泡個數是4~8,以後燈泡數每增加上一輪的燈泡數+2,開啟的燈泡數+1;即count(燈泡總數),first(上一輪的燈泡數),res(開啟的燈泡數),

count+=first; 

first+=2;

res++;

程式碼實現 

class Solution {
    public int bulbSwitch(int n) {
        if(n<=0){
            return 0;
        }
         if(n<=3){
            return 1;
        }
        if(n<=8){
            return 2;
        }
        int first=7;
        int count=8;
        int res=2;
        while (count<n){
            count+=first;
            first+=2;
            res++;
        }
        return res;
    }
}