[Leetcode] 第319題 燈泡開關
阿新 • • 發佈:2018-12-29
一、題目描述
初始時有 n 個燈泡關閉。 第 1 輪,你開啟所有的燈泡。 第 2 輪,每兩個燈泡你關閉一次。 第 3 輪,每三個燈泡切換一次開關(如果關閉則開啟,如果開啟則關閉)。第 i 輪,每 i 個燈泡切換一次開關。 對於第 n 輪,你只切換最後一個燈泡的開關。 找出 n 輪後有多少個亮著的燈泡。
示例:
輸入: 3 輸出: 1 解釋: 初始時, 燈泡狀態 [關閉, 關閉, 關閉]. 第一輪後, 燈泡狀態 [開啟, 開啟, 開啟]. 第二輪後, 燈泡狀態 [開啟, 關閉, 開啟]. 第三輪後, 燈泡狀態 [開啟, 關閉, 關閉]. 你應該返回 1,因為只有一個燈泡還亮著。
二、題目解析
1)這個問題關鍵在於理解題意和找出規律
2)其實就是每i個燈泡切換一次;用一個大小為n的陣列,把所有過程跑一遍;這樣會超時
3)發現規律,i*i~(i+1)*(i+1)有i個
三、程式碼
class Solution { public: int bulbSwitch(int n) { /*if (!n)return 0; vector<int>v(n, 1); for (int i = 2; i <= n; ++i) { for (int j = 1; i*j <= n; ++j) { if (v[i*j-1] == 1) v[i*j - 1] = 0; else v[i*j - 1] = 1; } } int res = 0; for (int i = 0; i < n; ++i) res += v[i];*/ int res = sqrt(n); return res; } };