Leetcode 319 燈泡開關

2021-09-02 05:21:21 字數 703 閱讀 3153

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

示例:

輸入: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)))。

LeetCode(319 燈泡開關)

如題 最直觀的做法就是模擬每次開關操作,用乙個int陣列儲存狀態,每次去判斷對應的位置更改對應index的值,但是很顯然這是指數即的計算。那麼換個方向,我們就以每個位置會進行開合的次數來判斷,很顯然開合奇數次則為開啟,否則為關閉。那麼開合次數是由上面決定的,間隔n不就是對應整除n麼,那麼對應的就是再...

319 燈泡開關

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

319 燈泡開關

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