初始時有?n?個燈泡關閉。 第 1 輪,你打開所有的燈泡。 第 2 輪,每兩個燈泡你關閉一次。 第 3 輪,每三個燈泡切換一次開關(如果關閉則開啟,如果開啟則關閉)。第?i 輪,每?i?個燈泡切換一次開關。 對于第?n?輪,你只切換最后一個燈泡的開關。 找出?n?輪后有多少個亮著的燈泡。
示例:
輸入: 3
輸出: 1?
解釋:?
初始時, 燈泡狀態 [關閉, 關閉, 關閉].
第一輪后, 燈泡狀態 [開啟, 開啟, 開啟].
第二輪后, 燈泡狀態 [開啟, 關閉, 開啟].
第三輪后, 燈泡狀態 [開啟, 關閉, 關閉].?
你應該返回 1,因為只有一個燈泡還亮著。
思路:
規律顯而易見,只有在輪數是該位置因數的時候才會執行翻轉操作。
于是我們回答了那個問題:只要找到該位置的所有因數個數,我們就知道該位置翻轉了多少次。
更進一步的,除了完全平方數,因數都是成對出現的,這意味著實際起到翻轉作用(0->1)的,只有
完全平方數而已。
class Solution {
public:int bulbSwitch(int n) {return sqrt(n);}
};