leetcod319 燈泡開關

2021-10-06 00:17:31 字數 967 閱讀 9910

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

示例:

輸入:

3輸出:

1 解釋:

初始時, 燈泡狀態 [關閉, 關閉, 關閉]

.第一輪後, 燈泡狀態 [開啟, 開啟, 開啟]

.第二輪後, 燈泡狀態 [開啟, 關閉, 開啟]

.第三輪後, 燈泡狀態 [開啟, 關閉, 關閉]

.

所有燈泡初始時刻都是關閉狀態,第i輪時,每i個燈泡轉換一次狀態。因此對於燈泡k來說,在整個過程中轉換狀態的次數是k的因子的數量。例如:k=6,因子有1,2,3,6.則第一輪、第二輪、第三輪和第六輪都會轉換狀態。

有了這個思路之後就很簡單了,我們求得1~n中,每個數字的因子數量,如果是奇數則表明最後燈泡開啟,偶數表明燈泡關閉。

class

solution

if(sq * sq == i)

--count;

if(count %2==

1)++res;

}return res;}}

;

上述方法執行超時。分析**可知,只有當數字k的因子數量是奇數時燈泡最後才會開啟。而由上面**的條件可知,只有當k的完全平方數的時候因子數量才是奇數。(例如9,1 *9, 3 *3,只要有乙個較小的因子,畢竟有乙個較大的因子對應,所以因子數量是偶數。但是如果是完全平方數,則這兩個因子相同,只記為1個。)

所以題目變成了求1~n中有多少個完全平方數。

class

solution

};

319 燈泡開關

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

319 燈泡開關

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

319 燈泡開關

鏈結 初始時有 n 個燈泡關閉。第 1 輪,你開啟所有的燈泡。第 2 輪,每兩個燈泡你關閉一次。第 3 輪,每三個燈泡切換一次開關 如果關閉則開啟,如果開啟則關閉 第 i 輪,每 i 個燈泡切換一次開關。對於第 n 輪,你只切換最後乙個燈泡的開關。找出 n 輪後有多少個亮著的燈泡。示例1 輸入 3 ...