1. 程式人生 > >Leetcode:319.燈泡開關

Leetcode:319.燈泡開關

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

示例:

輸入: 3
輸出: 1 
解釋: 
初始時, 燈泡狀態 [關閉, 關閉, 關閉].
第一輪後, 燈泡狀態 [開啟, 開啟, 開啟].
第二輪後, 燈泡狀態 [開啟, 關閉, 開啟].
第三輪後, 燈泡狀態 [開啟, 關閉, 關閉]
. 你應該返回 1,因為只有一個燈泡還亮著。

解題思路:

數學題。假設一開始所有燈泡都是滅的。對於一個正整數n,n=a*b(其中a<=b)。假設有k組這樣的(a,b)。假設當n不是完全平方數時,n被切換的次數是2k,偶數次,由於初始狀態是滅的,所以位置n處的燈泡是滅的;當n是完全平方數是必然有一個組合(a,b)其中a=b,使得總共有2k-1個數,奇數次,由於初始狀態是滅的,所以位置n的燈泡是亮的。總而言之,就是第k^2的位置燈泡必然是亮的。(k=1,2,...,int(sqrt(n)))。