319 燈泡開關

2021-10-05 01:47:33 字數 888 閱讀 4450

燈泡開關

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

輸入: 3

輸出: 1

解釋:

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

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

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

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

你應該返回 1,因為只有乙個燈泡還亮著。

模擬燈泡開關的過程的話,會因為輸入的值太大,而超時。

根據網上的提示,我們使用平方數亮著的原理來解決,只有按了奇數次開關的燈泡才能開啟。

第1輪:1,2,3,4,5,6,7,8,9,…

第2輪:2,4,6,8,10,12,…

第3輪:3,6,9,12,15,18,…

第j輪:j,2j,3j,4j,5j,… (int)sqrt(j)

第n輪:n

根據以上規律,我們可以知道

第1盞燈:第1 輪按下

第10盞燈:第1,2,5,10輪按下

第20盞燈:第1,2,4,5,10,20輪按下

第25盞燈:第1,5,25輪按下

所有的非平方數,都存在偶數個因子,因為p=ab,而平方數,存在奇數個因子,除了p=ab外,還有p=aa;

所以我們只需要找出n的所有平方數即可。

class solution 

}return count;

}}

參考題解:

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 ...