LeetCode319. 燈泡開關
初始時有 n 個燈泡關閉。 第 1 輪,你開啟所有的燈泡。 第 2 輪,每兩個燈泡你關閉一次。 第 3 輪,每三個燈泡切換一次開關(如果關閉則開啟,如果開啟則關閉)。第 i 輪,每 i 個燈泡切換一次開關。 對於第 n 輪,你只切換最後一個燈泡的開關。 找出 n 輪後有多少個亮著的燈泡。
示例:
輸入: 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;
}
}